我正在尝试计算c ++中2 ^ 1000的数字之和。
正如您所看到的,2 ^ 1000的值包含许多零和一些数字,但即使这样,sum的输出也会以小数形式显示。
我的代码如下:
#include <bits/stdc++.h>
using namespace std;
main() {
cout<<fixed;
long double a=pow(2,1000),sum=0;
cout<<"2^1000 is"<<a<<"\n";
while(a) {
sum+=fmod(a,10);
a/=10;
}
cout<<sum;
}
我使用了fmod()
,因为%运算符没有为long double重载,我之前从未使用过fmod()
但是如上所述here使用它。
我真的不认为fmod()
在这里犯了任何错误,所以有什么建议为什么sum的输出是小数?此外,正确的答案应该是1366。
以下是示例输出:
好的,通过使用这个Bigint库解决了我的问题!
答案 0 :(得分:2)
您无法将2^1000
存储在C ++中的单个变量中。 2^1000
需要至少1000位以二进制形式存储,基本类型的变量不够长。因此,第一个打印结果已经错误,请记住,2的幂不包含结尾0(2*2=4
,4*2=8
,8*2=16
,6*2=2
)。那么你不能依赖fmod
的结果。
2^1000=10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376