大整数类简介 - Dotnet 4.0






3.30/5 (15投票s)
这篇短文将展示 BigInteger 类的一些优势
引言
位于 System.Numerics 命名空间中的 BigInteger 类有助于表示任何大整数,而不会损失精度。它最初是在 dotnet framework 3.5 中引入的,但后来被移除(不知道确切原因)。但是,它又在 framework 4.0 中回归了。
使用代码
示例 1:计算 100 的阶乘。
static void Main(string[] args) { Console.Write("Factorial of hundred is : "); HundredFactorial(); Console.Read(); } ////// Function: HundredFactorial /// Factorial of Hundred /// private static void HundredFactorial() { BigInteger number = 100; BigInteger fact = 1; for (; number-- > 0; ) fact *= number+1; Console.WriteLine(fact); }
输出
该程序非常简单。我们使用了新的 Go To 运算符来循环遍历元素,以获得阶乘。
示例 2:求前十万个偶数斐波那契数列的和
static void Main(string[] args) { Console.WriteLine("The Sum Of First One Lac Even FibonacciSeries is : "); Console.WriteLine(Environment.NewLine); SumOfFirstOneLacEvenFibonacciSeries(); Console.Read(); } ////// Function: SumOfFirstOneLacEvenFibonacciSeries /// To find the Sum Of First One Lac Even FibonacciSeries /// private static void SumOfFirstOneLacEvenFibonacciSeries() { int limit = 100000; BigInteger num1 = 1; BigInteger num2 = 2; BigInteger sum = 0; BigInteger evenSum = num1 + num2; for (int i = 2; i < limit; i++) { sum = num1 + num2; if (sum % 2 == 0) evenSum += sum; num1 = num2; num2 = sum; } Console.WriteLine(evenSum); }
斐波那契数列类似于 1,2,3,5,8,11...等。
即 1+2 =3, 2+3 =5, 3+5 = 8 等。
该程序找到达到十万的斐波那契数,并给出仅偶数斐波那契数的和。
输出为:
一些 BigInt 方法
a) 最大公约数 (GreatestCommonDivisor)
用于查找两个数的 GCM 的程序
Console.WriteLine("GCM = " + BigInteger.GreatestCommonDivisor(12, 24));
输出为:12
b) 比较 (Compare)
比较两个 System.Numerics.BigInteger 值,并返回一个整数,指示第一个值是小于、等于还是大于第二个值。
BigInteger num1 = 10; BigInteger num2 = 100; switch (BigInteger.Compare(num1, num2)) { case -1: Console.WriteLine("{0} is less than {1}", num1, num2); break; case 0: Console.WriteLine("{0} is equal to {1}", num1, num2); break; case 1: Console.WriteLine("{0} is greater then {1}", num1, num2); break; }
c) 解析 (Parse)
将数字的字符串表示形式转换为其 System.Numerics.BigInteger 等效形式。例如:
BigInteger.Parse("10000000")
d) 取反 (Negate)
取反指定的 System.Numerics.BigInteger 值。例如:
Console.WriteLine(BigInteger.Negate(-100));
结果为 100,
Console.WriteLine(BigInteger.Negate(100));
结果为 -100
e) Sign 读取属性。
获取一个数字,指示当前 System.Numerics.BigInteger 对象的符号(负数、正数或零)。例如:
Console.WriteLine(BigInteger.Negate(0).Sign);
将给出 0
Console.WriteLine(BigInteger.Negate(-1).Sign);
将给出 1
While
Console.WriteLine(BigInteger.Negate(1).Sign);
将给出 -1
像这些一样,这个类有很多属性和方法,可以帮助进行非常大的数学计算。
类型转换
BigInteger 到标准数字类型以及反向转换都是可能的。
//Conversion(int to BigInterger) int i = 100; BigInteger bI = (BigInteger)i; Console.WriteLine(bI); //Conversion (BigInteger to int) BigInteger BI = 200; int j = (int)BI; Console.WriteLine(j); Console.Read();
结论
在本文中,我们了解了 BigInteger 类的一些用法,它在较大数字计算中的用处,以及该类的一些内置方法和属性。
非常感谢您对该主题的评论,以便改进该主题。
感谢阅读本文。