我在计算下面的值。模数除法中的整数溢出
prod = 1;
for(int i=1;i<N;i++){
prod = prod*i;
}
由于N可以是大的,我是要计算模10^9+7
和我做到了。
int prod =1;
for(int i=1;i<N;i++)
{
prod = ((prod%1000000007) * (i%1000000007))%1000000007;
}
其他人做了。
网上法官正在采取第二个正确的。为什么?
所以我跑这
int prod = 1;
long ways = 1;
for(int j=1;j<14;j++){
prod = ((prod%1000000007) * (j%1000000007))%1000000007;
ways = (int)(j * ways % 1000000007);
if(prod!=ways){
System.out.println(prod+" "+ways);
System.exit(0);
}
System.out.println(prod+" "+ways+" "+j);
}
当prod or ways
是479001600
和j
是下一个迭代12
它们不相等。这两者都是比INT最大值是2147483647
所以我这样做,他们是平等的
prod = ((479001600%1000000007) * (12%1000000007))%1000000007;
ways = (int)(12 * 479001600 % 1000000007);
if(prod!=ways){
System.out.println(prod+" "+ways);
System.exit(0);
}
System.out.println(prod+" "+ways);
我认为这是什么东西铸造少。但无法弄清楚。请告诉我,如果我做错了什么?
搜索int范围,你会看到问题是。 –
为什么downvote。 Dint我尝试了什么?这是一个微不足道的问题吗? – WannaBeCoder
这是一个微不足道的问题,因为你已经知道整数有溢出。搜索整数溢出很可能会导致对你的问题的回答。 –