Pra*_*ant 1 c c++ data-structures
如何在没有崩溃编译器的情况下将2计算到功率10000000.在c/c ++中,外部大整数的数据类型应该是什么.
对于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)乘法.
| 归档时间: |
|
| 查看次数: |
6354 次 |
| 最近记录: |