Страница: 1 |
Страница: 1 |
Вопрос: Длинная арихметика на VB .NET
Добавлено: 09.02.07 00:24
Автор вопроса: Artyom
Внимание! Данный вопрос не является вопросом о том как сделать в VB .NET длинную арифметику, поэтому, пержде чем написать "это тут 100 раз обсуждалось", "в поиск", "в гугл", "смотри соседню ветку", "боян" просьба дочитать сообщение до конца. Спасибо.
Совсем недавно стихли споры по поводу .NET Framework 3.0
Напомню что .NET Framework 3.0 фактически является бандлом из .NET Framework 2.0 и платформы, именуемой ранее WinFX (Windows Presentation Foundation + Windows Communication Foundation + Windows Workflow Foundation + Windows CardSpace).
Сейчас уже появляется информация о следующей версии .NET Framework - .NET Framework 3.5
Вместе с ним мы увидим также новую версию Visual Studio (codename Orcas), новые версии языков Visual Basic и C# (VB 9.0 и C# 3.0 соответственно)
Новый Framework, как обычно должен принести больше новых возможностей. Что же это за возможности?
Как вы, наверное, уже догадались из темы сообщения, теперь у нас есть реализация длинной арихметики.
Да, теперь мы можем использовать длинную арифметику.
* Для этого не нужно ничего спрашивать на форуме
* Для этого не нужно реализовывать операции сложения, вычитания и деления с помощью строк или массивов
* Для этого не нужно вставлять в свою программу код из сторонних проектов
* Для этого не нужно подключать библиотеки сторонних производителей
Для этого достаточно объявить переменную с типом BigInteger и сосредоточиться на решении задачи.
Imports System.Numeric
Module Module1
Sub Main()
Console.Write("Input the number, please: ")
Dim Value = BigInteger.Parse(Console.ReadLine)
Dim Start = Now
Console.WriteLine("{0}! = {1}", Value, Factorial(Value))
Console.WriteLine(Now.Subtract(Start))
Console.ReadLine()
End Sub
Function Factorial(ByVal x As BigInteger) As BigInteger
If x < 0 Then
Return Factorial(-x)
ElseIf x <= 1 Then
Return x
Else
Return x * Factorial(x - 1)
End If
End Function
End Module
Результат:
500! = 1220136825991110068701238785423046926253574342803192842192413588385845373
15388199760549644750220328186301361647714820358416337872207817720048078520515932
92854779075719393306037729608590862704291745478824249127263443056701732707694610
62802310452644218878789465754777149863494367781037644274033827365397471386477878
49543848959553753799042324106127132698432774571554630997720278101456108118837370
95310163563244329870295638966289116589747695720879269288712817800702651745077684
10719624390394322536422605234945850129918571501248706961568141625359056693423813
00885624924689156412677565448188650659384795177536089400574523894033579847636394
49053130623237490664450488246650759467358620746379251842004593696929810222639719
52597190945217823331756934581508552332820762820023402626907898342451712006207714
64097945611612762914595123722991334016955236385094288559201872743379517301458635
75708283557801587354327688886801203998823847021514676054454076635359841744304801
28938313896881639487469658817504506926365338175055478128640000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000
00:00:00.0200288
Вот она, вот она, дорога в светлое будущее.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 09.02.07 00:34
Самые внимательные читатели могут заметить небольшое несоответствие:
...
Dim Value = BigInteger.Parse(Console.ReadLine)
Dim Start = Now
Любители Visual Basic .NET должны заметить, что тип переменных Value и Start не указан, но в верху стоит директива, требующая явной типизации.
Каким образом код с явной ошибкой вообще может компилироваться?
Все очень просто - это новая фича VB 9.0 - local type inference. Теперь не обязательно указывать тип переменой - компилятор сам поймет, какой тип используется по строке инициализации.
Разумеется, для этой переменной будет работать соответствующий IntelySense.
Включить/отключить данную функцию можно с помощью директив:
Option Infer Off
Данная функциональность по умолчанию включена во всех новых проектах, созданных в Visual Studio Orcas и по умолчанию отключена в проектах, мигрировавших в Orcas с ранних версий Visual Basic.
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 09.02.07 03:16
Thanks
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 09.02.07 09:26
Прикольно.. ) Спасибо за инфу!
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 09.02.07 11:10
.NET потихоньку повторяет жавовские фичи, правда, с задержкой почти 10 лет.
Номер ответа: 5
Автор ответа:
Viktor
Вопросов: 9
Ответов: 29
Профиль | | #5
Добавлено: 15.02.07 08:41
Да-а-а-а... Если так и дальше пойдёт, то я опять вернусь к простому и понятному VB6. Но всё равно спасибо
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 15.02.07 09:52
Может я тупой, но причинно-следственных взаимосвязей че-то не уловил...