public static int fact(int x) {
int y = x;
for (int i = x - 1; i > 0; i--) {
y = y * i;
}
return y;
}
我甚至尝试使用递归方法来寻找阶乘法,但这两种方法都为3057或任何高值数字等数字给出了答案0。
答案 0 :(得分:2)
尝试使用long
代替int
。你可能只是超越了整数。如果这不起作用,您将不得不切换到允许更大尺寸的BigInteger
。
编辑我只是厌倦了这个并且它适用于较小的数字,你肯定会超越int。下面的基于BigInteger的代码适用于输入3057。
public static BigInteger fact(int x){
BigInteger y = BigInteger.valueOf(x);
for(int i=x-1;i>0;i--){
y = y.multiply(BigInteger.valueOf(i));
}
return y;
}
或者你可以使用稍微不那么笨重的BigDecimal
:
public static BigDecimal fact(int x){
BigDecimal y = new BigDecimal(x);
for(int i=x-1;i>0;i--){
y = y.multiply(new BigDecimal(i));
}
return y;
}