(C++) 关于 quick-pow func (a^^b)mod c

问题描述 投票:0回答:0

我用一个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;
};

TRYING 2^^50

c++ biginteger
© www.soinside.com 2019 - 2024. All rights reserved.