C#で2つの64桁の10進数をオーバーフローせずに乗算するにはどうすればよいですか?
4 に答える
64桁の 10 進数が必要で、それらが整数の場合は、System.Numerics.BigInteger
struct を使用できます (System.Numerics.dll
アセンブリへの参照が必要です)。
BigInteger firstNumber = BigInteger.Parse("63518439492097324687235465876298368764576527346564625480");
BigInteger secondNumber = BigInteger.Parse("84890247648975285765484902890273086475254764765147643611");
BigInteger product = firstNumber * secondNumber;
最後の数字(文字)を取得し、それを他の文字からのすべての数字で乗算するよりも、最初にその数字を文字列に変換する(したがって、2つの別々の文字列)任意の数字の計算を(必要な限り)行うことができると思います(学校で習ったのと同じように)などで、それを最終的なスコア番号に追加します(これも文字列として)。私はこれができることを知っており、最初は難しいロジックになるでしょうが、この関数を作成すると、任意の数を掛けることができます:)
整数の場合は、System.Numerics の BigInteger クラスを使用します (System.Numerics.dll を参照してください)。
そうでない場合は、Codeplex に BigRational クラスがあります。System.Numerics にあるはずでしたが、キックされました。リンク: http://bcl.codeplex.com/releases/view/42782
decimal
2 つの数値の乗算の結果を格納するために常に使用できlong
ます。
long bigNumber = 12345678L;
long anotherBigNumber = 23456789L;
decimal result = bigNumber * anotherBigNumber;