负长被退回?

时间:2013-03-04 15:26:20

标签: iteration long-integer factorial

在这个迭代因子方程中,我通过大于39的任何数字都显示为负数。这是为什么

    public static void main(String[] args)
    {
        long var = formula(40);
        if(var != 0){
        System.out.print(var);
        }
        else{return;}
    }
    public static long formula(final int n) {
        if (n < 0) {
            System.err.println("No negative numbers");
            return 0;
        }
        long ans = 1;
        for (int i = 1; i <= n; i++) {
            ans *= i;
        }


        return ans;
        }
}

1 个答案:

答案 0 :(得分:1)

这是因为有溢出的东西。某些类型可以容纳的值有限制。如果超过整数类型值的限制,则会遇到整数溢出。这是一个关于integer overflow的链接,其中包含更多细节。

要点是因子是一个快速增长的指数函数,因此不需要很长时间才能得到一个不适合长整数的值。当你看到负数时,这是因为你超过了这个限制。该限制取决于平台,但对于unsigned long int,通常约为4,294,967,295。

使用上述限制,您只能计算最多12位的因子,13及以上会溢出。