BigInteger構造体とは
BigIntegerは、C#のSystem.Numerics名前空間に含まれるデータ型で、非常に大きな整数を扱うことができます。通常の整数型(intやlong)では表現できないような大きな数値を扱う必要がある場合に使用します。long型であれば9,223,372,036,854,775,807(2^64-1)が上限ですが、それ以上の整数を扱うことが出来ます。
使用方法
BigIntegerはSystem.Numerics名前空間に含まれているため、ソースコードの先頭にusing System.Numericsを宣言する必要があります。
using System.Numerics;
BigInteger bi1 = new BigInteger(12345);//初期化
BigInteger bi2 = 456;//初期化2
BigInteger bt3 = BigInteger.Parse("123456789012345678901234567890");//文字列を変換することも出来る
Console.WriteLine(bt3);
long lg1 = long.Parse("123456789012345678901234567890");//実行時にSystem.OverflowExceptionが発生する。
Console.WriteLine(lg1);
//以下の階乗のコードを実行する場合には9行目をコメントアウトしてください
BigInteger bt = 1;//BinIntegerで表現する
long lg = 1;//long型で表現する
for(int i = 1; i < 25; i++)//1から24までの階乗を表示する
{
bt *= i;
lg *= i;
Console.WriteLine(lg);
Console.WriteLine(bt);
Console.WriteLine(" ");
}
long型のParseメソッドをコメントアウトして階乗の実行結果は以下の通りです。
//最初の方はBigIntegerとlongでは同じ値を表示しているが・・・
1
1
2
2
6
6
24
24
120
120
720
720
5040
5040
40320
40320
362880
362880
3628800
3628800
39916800
39916800
479001600
479001600
6227020800
6227020800
87178291200
87178291200
1307674368000
1307674368000
20922789888000
20922789888000
355687428096000
355687428096000
6402373705728000
6402373705728000
121645100408832000
121645100408832000
2432902008176640000
2432902008176640000
//21!以降を表現するとlong型ではオーバーフローしている
-4249290049419214848
51090942171709440000
-1250660718674968576
1124000727777607680000
8128291617894825984
25852016738884976640000
-7835185981329244160
620448401733239439360000
まとめ
BigIntegerは、非常に大きな整数を扱うための便利なデータ型です。
基本的な算術演算が可能で、他の数値型からの変換も簡単です。
コメント