为什么这个输出有小数?这也远非正确的答案

时间:2015-05-18 05:40:54

标签: c++

我正在尝试计算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。

以下是示例输出:

sample execution

好的,通过使用这个Bigint库解决了我的问题!

1 个答案:

答案 0 :(得分:2)

您无法将2^1000存储在C ++中的单个变量中。 2^1000需要至少1000位以二进制形式存储,基本类型的变量不够长。因此,第一个打印结果已经错误,请记住,2的幂不包含结尾0(2*2=44*2=88*2=166*2=2)。那么你不能依赖fmod的结果。

2^1000=10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376