Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 и сосредоточиться на решении задачи.

Option Strict On

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


Результат:
Input the number, please: 500
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
Самые внимательные читатели могут заметить небольшое несоответствие:

Option Strict On
...
Dim Value = BigInteger.Parse(Console.ReadLine)
Dim Start = Now


Любители Visual Basic .NET должны заметить, что тип переменных Value и Start не указан, но в верху стоит директива, требующая явной типизации.
Каким образом код с явной ошибкой вообще может компилироваться?

Все очень просто - это новая фича VB 9.0 - local type inference. Теперь не обязательно указывать тип переменой - компилятор сам поймет, какой тип используется по строке инициализации.
Разумеется, для этой переменной будет работать соответствующий IntelySense.

Включить/отключить данную функцию можно с помощью директив:

Option Infer On
Option Infer Off

Данная функциональность по умолчанию включена во всех новых проектах, созданных в Visual Studio Orcas и по умолчанию отключена в проектах, мигрировавших в Orcas с ранних версий Visual Basic.

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 09.02.07 03:16
Thanks

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 09.02.07 09:26
Прикольно.. :-)) Спасибо за инфу!

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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
Может я тупой, но причинно-следственных взаимосвязей че-то не уловил...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам