nに後続ゼロの数を返すために書き込むコードは2つあります。最初のバージョンは入力1808548329
に対して452137080
を返し、2番目のバージョンは入力1808548329
に対して452137076
を返します。なぜ違いがあるのだろうか?第2版の出力は正しいです。 JavaのでFactorial Trailing Zeroを見つけたときに矛盾した結果が発生しました
ソースコードは、
public class TrailingZero {
public static int trailingZeroes(int n) {
int result = 0;
int base = 5;
while (n/base > 0) {
result += n/base;
base *= 5;
}
return result;
}
public static int trailingZeroesV2(int n) {
return n == 0 ? 0 : n/5 + trailingZeroesV2(n/5);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(trailingZeroes(1808548329));
System.out.println(trailingZeroesV2(1808548329));
}
}
[Factorial Trailing Zeroを見つけるために別の結果を返す]の可能な複製(http://stackoverflow.com/questions/42754047/return-different-result-to-find-factorial-trailing-zero) –
(再帰呼び出し(これは明示的に述べて、前の質問にリンクするのに役立つかもしれません)) 'base'の大きさを見てください。 – greybeard