我用一个quick_pow func来计算a^^b(a=2,b大于400),同时我还需要mod得到低位num作为leetcode练习的输出。 经过几个小时的检查,我终于找到了我的 qpow() 函数的问题。但是当我在 qpow2() 中将其更改为更简单的方法后,它确实给出了正确的答案。所以我尝试了一个简单的代码来查看差异。正如您在我的屏幕截图中看到的那样,qpow() 在“-83648”中出错,然后在那之后保留“0”。你能告诉我这里发生了什么吗?非常感谢。
#include<iostream>
#include<stdlib.h>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
int qpow(int n) {
int x = 1, a = 2;
while (n > 0) {
if (n % 2) {
x *= a;
x %= 100000;
};
a *= a;
a %= 100000;
n /= 2;
};
return x;
};
int qpow2(int n) {
int x = 1, a = 2;
while (n--)
{
x *= a;
x %= 100000;
};
return x;
};
int main() {
int n;
cin >> n;
for (int i = 10; i < n; i++)
{
cout << qpow(i) << " | ";
cout << qpow2(i) << " | ";
cout << INT_MAX << endl;
};
return 0;
};