N!表示n X(n-1)X ... X 3 X 2 X 1
例如,10! = 10 X 9 X ... X 3 X 2 X 1 = 3628800, 和数字10中的数字之和!是3 + 6 + 2 + 8 + 8 + 0 + 0 = 27。
import java.util.*;
class ProjectEuler_20{
public static double factorial(double number){
double num=1;
for(int i=2;i<=number;i++){
num=num*i;
}
return num;
}
public static void main(String args[]){
double number=factorial(100);
long num=(long)number;
long sum=0;
for(int i=0;num>0;i++){
sum=sum+num%10;
num=num/10;
}
System.out.println(sum);
}
}
为什么我总是得到Long.MAX_VALUE数字的总和?有没有办法接近真正的答案?
答案 0 :(得分:0)
double
无法准确地保存与100!
一样大的数字 - 您必须使用BigInteger
准确地执行乘法。
这是一行java 8答案:
IntStream.range(1,101).mapToObj(String::valueOf).map(BigInteger::new)
.reduce(BigInteger::multiply).get().toString().chars().map(i -> i - '0')
.reduce((i,j) -> i + j).ifPresent(System.out::println);
输出:
648
fyi,100!
是93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000