我一直试图在Project Euler中解决Problem 20:
n! means n (n 1) … 3 * 2 * 1
For example, 10! = 10 * 9 … 3 * 2 * 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.
Find the sum of the digits in the number 100!
这是我到目前为止所提出的.我已经用这段代码得到了正确的答案(648),但我得到了一点OC,因为我的代码是一个无限循环.在while循环中结果变为0之后,它就不会停止.任何人都可以帮我解决这个问题吗?
public static BigInteger problem20(int max){
BigInteger sum = BigInteger.valueOf(0);
BigInteger result = BigInteger.valueOf(1);
BigInteger currentNum = BigInteger.valueOf(0);
for(long i = 1; i<=max; i++){
result = result.multiply(BigInteger.valueOf(i));
//System.out.println(result);
}
while (!result.equals(0)) {
sum = sum.add(result.mod(BigInteger.valueOf(10)));
result = result.divide(BigInteger.valueOf(10));
System.out.println(sum + " "+ result);
}
return sum;
}
解决方法:
这就是问题:
while (!result.equals(0))
结果是一个BigInteger,永远不会等于整数.尝试使用
while (!result.equals(BigInteger.ZERO))