该程序保持返回"因子100为0"每100个数字作为输出。 问题出在哪里?
public class Factorial4 {
public static void main(String[] args) {
for (int i=1; i<=100; i++){
System.out.println("Factorial of " + i + " is " + factorial(i));
}
}
public static int factorial(int n){
int result = 1;
for (int i=1; i<=100; i++){
result *= i;
}
return result;
}
}
答案 0 :(得分:2)
此代码有多个问题:
Integer.MAX_VALUE
的值。您必须使用BigInteger
代替。 0只是大量溢出的结果。答案 1 :(得分:2)
n
不是100
。
public static int factorial (int n){
int result = 1;
for (int i = 2; i <= n; i++) { // <-- n, not 100.also, x*1=x
result *= i;
}
return result;
}
值得注意的是,int
会100!
溢出,因此您可以使用BigInteger
之类的
public static BigInteger factorial(int n) {
BigInteger result = BigInteger.ONE;
for (int i = 2; i <= n; i++) { // <-- n, not 100.also, x*1=x
result = result.multiply(BigInteger.valueOf(i));
}
return result;
}
答案 2 :(得分:0)
正确的逻辑是
public static BigInteger factorial(int n){
BigInteger result = 1;
for (int c=1; c<=n; c++){
result =result.multiply(BigInteger.valueOf(c));
}
return result;
}
使用BigInteger会有意义,因为result
会超过int
范围
答案 3 :(得分:0)
整数范围问题...对于小'n',你可以使用long(对于'result'),对于较大的'n',可以使用double。