首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的二进制求幂

C++中的二进制求幂
EN

Stack Overflow用户
提问于 2018-10-23 09:53:28
回答 1查看 358关注 0票数 0

可以在下面找到我的二进制求幂实现

代码语言:javascript
复制
#include<iostream>
#include<cmath>
using namespace std;

int fast_exponentiation(int base, int pow) {
    unsigned int result; // variable to store intermediaries

    if (pow == 1) {
        return base;
    }
    else if (pow == 0) {
        return 1;
    }

    result = fast_exponentiation(base, floor(pow/2));

    // even power
    if (pow % 2 == 0) {
        return result * result; 
    }
    // odd power
    else {
        return result * base * result;
    }
}

int main() {
    int num, answer, p;
    cout <<  "Enter the base: ";
    cin >> num;

    cout << "Enter power: "; 
    cin >> p;

    answer = fast_exponentiation(num, p);
    cout << answer <<  endl;

    return 0;
}

问题是,当我对输入num= 3和pow = 20运行这个函数时,我得到了-808182895,一个负数。我似乎找不出代码出了什么问题?我能得到一些帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2018-10-23 10:16:04

3^20的值超过了最大可能的int值2^31,因此出现溢出。克服这一限制的最简单方法是使用long long数据类型为计算提供最高39次方(接近2^63)的可能性。

对于较大的功率,需要较长的数字运算- boost多精度,GMP等

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52940030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档