前提・実現したいこと
10桁以上の計算結果を可能な限り正しく出力したい。
発生している問題・エラーメッセージ
コードの1行目の数値で開始と終了を指定した整数の範囲の階乗の結果が表示されますが全て10桁になる (10, 14) 10~14までの階乗を出力する 12! = 479001600 13! = 1932053504 14! = 1278945280
該当のソースコード
IntStream.rangeClosed(10, 14) .forEach(i -> { int kaijo = IntStream.rangeClosed(1, i).reduce(1, (i1, i2) -> i1 * i2); System.out.println(i + "! = " + kaijo); });
試したこと
変数の型をint型からdouble型に変えたが結果変わらず
print関連のjavadocを読んでみたりネットで桁数関連の検索をしてみたのですが解決には至りませんでした。
恐らく13!までは正常に表示されていて14!から桁が足りていないのではないかと思います。
何かしらの仕様だとは思うのですが何故このような表示になるのか理由と解決策があれば知りたいです。
参考までに追記と感想
回答頂いた中から参考にさせていただきfor文で書いたところ、意外とあっさり動いていまいました。
streamはとても便利だと思うのですが理解度が足りず、自分で変更などしようとすると思い通りにならず苦労します。
頂いた回答を元に色々と触って精進したいと思います。
Java
1for (int i = 10; i <= 20; i++) { 2 BigInteger kaijo = BigInteger.valueOf(1); 3 for (int j = 1; j <= i; j++) { 4 kaijo = (kaijo).multiply(BigInteger.valueOf(j)); 5 } 6 System.out.println(i + "! = " + kaijo); 7} 8
回答5件
あなたの回答
tips
プレビュー