如何计算2到10000000的功率

Pra*_*ant 1 c c++ data-structures

如何在没有崩溃编译器的情况下将2计算到功率10000000.在c/c ++中,外部大整数的数据类型应该是什么.

650*_*502 5

对于2提升到1000的幂的非常具体的值,double就足够了.

#include <stdio.h>
#include <math.h>

int main(int argc, const char *argv[]) {
    printf("%f\n", pow(2., 1000));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通常,您需要实现任意精度乘法算法来计算大数(或使用提供该数字的库).

C++没有用于此类计算的预定义标准函数.

如果你想将自己的版本作为练习来实现,那么我的建议是使用基数为10000的数字.它们足够小,单位数乘法不会溢出,将结果转换为十进制非常容易和快速.结束因为您可以将base-10000数字映射到十进制而不必实现除模数.

同样要计算如此大的功率(10,000,000),你需要通过平方来实现功率,即

BigNum pow(BigNum a, int b) {
    if (b == 0) {
        return 1;
    } else if (b & 1) {
        return a*pow(a, b-1);
    } else {
        BigNum x = pow(a, b/2);
        return x*x;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将允许计算pow(a, b)O(log(b))的,而不是O(b)乘法.

  • 不建议这样做,因为答案不准确。http://stackoverflow.com/questions/7371928/c-pow2-1000-is-normaly-to-big-for-double-but-its-working-why (2认同)
  • @AbhirathMahipal:正如我所说,它适用于2的非常具体的值,增加到1000.为此,结果是正确的.如果您不相信,请花时间阅读并理解您要链接的答案. (2认同)