0

在这个迭代阶乘方程中,我通过的任何大于 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;
        }
}
4

1 回答 1

1

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

要点是阶乘是一个快速增长的指数函数,因此很快就会得到一个不适合长整数的值。当您看到负数时,那是因为您已超出此限制。该限制取决于平台,但对于 unsigned long int,通常约为 4,294,967,295。

使用上述限制,您将只能计算高达 12 的阶乘!,13 及以上会溢出。

于 2013-03-04T15:27:46.367 回答