N 个数字的乘积,答案错误,可能溢出?

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,我的结果不正确,我怀疑可能溢出。我该如何解决它?

Kir*_*lov 5

如果你必须写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)