Dud*_*ude -3 java algorithm overflow
我正在尝试解决“前 n 个数字的乘积”问题
long ans=1;
for(int i=1;i<=n;i++){
ans = ans*i;
}
return ans % (1000000007) ;
Run Code Online (Sandbox Code Playgroud)
对于大 n,我的结果不正确,我怀疑可能溢出。我该如何解决它?
如果你必须写answer % 1000000007
,你可以(而且我想你应该)%
每次在for
循环中使用运算符。
long ans = 1;
long p = 1000000007;
for (int i = 0; i < n; i++)
{
ans = (ans * i) % p;
}
return ans;
Run Code Online (Sandbox Code Playgroud)
如果这还不够,你可以试试这个:
long ans = 1;
long p = 1000000007;
for (int i = 0; i < n; i++)
{
ans = ((ans % p) * (i % p)) % p;
}
return ans;
Run Code Online (Sandbox Code Playgroud)