https://projecteuler.net/problem=13
计算出以下一百个50位数字之和的前十位数。
我尝试在Xcode中使用C ++解决它。我将数字保存在一个文件中并成功构建但得到了错误的答案。这是我的代码:
#include <fstream>
#include <iostream>
using namespace std;
int main(void) {
double sum = 1;
double num;
ifstream fin("/Users/pwd/programs/projectEuler13/num.txt");
while (fin) {
fin >> num;
sum += num;
}
fin.close();
cout.precision(12);
cout << sum << endl;
return 0;
}
我得到了结果: 5.59087976462e + 51
总和的前10位数:5590879764。 但这是错误的。我的代码出了什么问题?
答案 0 :(得分:2)
我可以看到几个问题:
从1开始求和,虽然这不太可能改变你的结果。
使用浮点引入不准确性。更有可能改变你的结果,但在这种情况下它可能仍然不会,因为你只需要10位有效数字。
最严重的问题:错误地循环输入。见Why is iostream::eof inside a loop condition considered wrong?。这可能会导致您将最后一个数字添加两次。循环输入流的正确方法是:
while (fin >> val) {
//do something with val.
}