Project Euler .NET のProblem 20について
”100!の各桁の和を計算せよ”とのことだがC#でごり押しで書いていくと何とか計算できた。もっと簡単にできる方法があるに違いないと思い問題を解いた後にググッてみるとJ#にBigIntegerなるクラスがあることを知る。おう、無駄な努力をしてしまった。下がBigIntegerを使用して書いたコード。
// 参照設定にvjslib.dllを追加しておく java.math.BigInteger num = new java.math.BigInteger("1"); for (int i = 1; i <= 100; ++i) { num = num.multiply(new java.math.BigInteger(i.ToString())); } string strNum = num.ToString(); int sum = 0; for (int i = 0; i < strNum.Length; ++i) { string str = strNum.Substring(i, 1); sum += int.Parse(str); }
組み込み型の範囲を超えるような大きな数値計算を今までしたことが無かったので、このあたりのことを調べてわかったことを以下に記述
・現状、C#のライブラリにはBigIntegerのような大きな計算を行えるクラスがないので、vjslib.dll(J#)のBigIntegerクラスを利用するか、Code Projectにある有志の人が作ったクラスを利用するしかない。
・Visual Studio 2010/.NET 4.0 でBigIntegerがサポートされる