在这个迭代因子方程中,我通过大于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;
}
}
答案 0 :(得分:1)
这是因为有溢出的东西。某些类型可以容纳的值有限制。如果超过整数类型值的限制,则会遇到整数溢出。这是一个关于integer overflow的链接,其中包含更多细节。
要点是因子是一个快速增长的指数函数,因此不需要很长时间才能得到一个不适合长整数的值。当你看到负数时,这是因为你超过了这个限制。该限制取决于平台,但对于unsigned long int,通常约为4,294,967,295。
使用上述限制,您只能计算最多12位的因子,13及以上会溢出。