65.9K
CodeProject 正在变化。 阅读更多。
Home

大整数类简介 - Dotnet 4.0

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.30/5 (15投票s)

2010年10月25日

CPOL

2分钟阅读

viewsIcon

39263

downloadIcon

206

这篇短文将展示 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);
        } 

输出

2.jpg

该程序非常简单。我们使用了新的 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 等。

该程序找到达到十万的斐波那契数,并给出仅偶数斐波那契数的和。

输出为:

4.jpg

一些 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 类的一些用法,它在较大数字计算中的用处,以及该类的一些内置方法和属性。

非常感谢您对该主题的评论,以便改进该主题。

感谢阅读本文。

© . All rights reserved.