因子逻辑没有给出答案

时间:2015-01-10 13:53:57

标签: java factorial

public static int fact(int x) {
    int y = x;
    for (int i = x - 1; i > 0; i--) {
        y = y * i;
    }
    return y;
}

我甚至尝试使用递归方法来寻找阶乘法,但这两种方法都为3057或任何高值数字等数字给出了答案0。

1 个答案:

答案 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;
}