我尝试了 Hackerearth 教程 question并能够使用以下代码正确解决它:
#include <iostream>
using namespace std;
int main() {
const long int MOD = 1000000007;
const long int SIZE = 100001;
long int t, n;
long int cache[SIZE];
cache[0] = 1;
for (long int i = 1; i < SIZE; i++) {
cache[i] = ( i * cache[i-1] ) % MOD;
}
cin >> t;
while (t--) {
cin >> n;
cout << cache[n] << endl;
}
return 0;
}
但是用科学记数法写MOD或SIZE时,在线判断会报错。我在这里缺少什么?
#include <iostream>
using namespace std;
int main() {
const long int MOD = 10e9+7;
const long int SIZE = 100001;
long int t, n;
long int cache[SIZE];
cache[0] = 1;
for (long int i = 1; i < SIZE; i++) {
cache[i] = ( i * cache[i-1] ) % MOD;
}
cin >> t;
while (t--) {
cin >> n;
cout << cache[n] << endl;
}
return 0;
}
最佳答案
科学计数法表示“常数乘以 10 的 x 次方”。如果您想要 1000000007
,则需要 1e9
,意思是“一个后跟九个零”。现在您使用 10e9
,它是“十后跟九个零”或“一个后跟十个零”,所以您偏离了十分之一。
关于c++ - 由于使用科学记数法而出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815355/