我正在尝试解决以下问题:
2 ^ 15 = 32768,其位数之和为3 + 2 + 7 + 6 + 8 = 26。
数字2 ^ 1000的位数之和是什么?
由于精度错误,我一直得到错误的输出。但是,正如您在下面看到的那样,我尝试确保所有内容都不会四舍五入,也不会因为精度而丢失。我编写的代码比期望的输出(1366)少两个(1364)。如何优化我的代码,以免由于精度和舍入错误而丢失其他内容?
#include <iostream>
#include <tgmath.h>
#include <string>
using namespace std;
int main() {
int sum=0;
double N = pow(2.0, 1000.0);
string num = to_string(N);
for(int i=0; i<num.size(); i++) {
sum += num[i] - '0';
}
cout<<sum;
return 0;
}
答案 0 :(得分:1)
根据WolframAlpha,2^1000
的结果为
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
那将永远不会适合int
或double
。您需要找到一个支持大量数字的库。 The GNU Multiple Precision Arithmetic Library是这样的图书馆之一。