输入:
9
524645 379018
934126 888771
877255 187002
794376 704320
515429 925706
744641 544701
500831 147443
134241 544167
466755 263186
输出:阶乘函数中的堆栈溢出
在引发异常时计算阶乘时
传递的值为a = 374315
但是在hackerrank上它被接受了,你能告诉我它为什么发生吗?
我只是在下面的程序中计算ncr mod p,并且堆栈溢出 在上述特定实例中。
#include <iostream>
using namespace std;
int k = 1000000007;
long long f(long long a)
{
if (a < 2)
return 1;
else
return (a*f(a - 1)) % k;
}
long long modpow(long long base, long long exp, long long modulus)
{
base %= modulus;
long long result = 1;
while (exp > 0)
{
if (exp & 1)
result = (result * base) % modulus;
base = (base * base) % modulus;
exp >>= 1;
}
return result;
}
int main()
{
int t, m, n;
cin >> t;
while (t--)
{
cin >> m >> n;
long long temp = (f(n - 1) % k*f(m - 1) % k) % k;
temp = modpow(temp, k - 2, k); //(f(n)*f(m-1))^(10000000007-2)
long long result = (f(n + m - 2) % k*temp%k) % k;
cout << result << endl;
}
return 0;
}
https://www.hackerrank.com/challenges/matrix-tracing/problem