我在計算下面的值。模數除法中的整數溢出
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
這是一個微不足道的問題,因爲你已經知道整數有溢出。搜索整數溢出很可能會導致對你的問題的回答。 –