项目欧拉#13 c ++

时间:2016-05-28 13:14:57

标签: c++

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。 但这是错误的。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

我可以看到几个问题:

  1. 从1开始求和,虽然这不太可能改变你的结果。

  2. 使用浮点引入不准确性。更有可能改变你的结果,但在这种情况下它可能仍然不会,因为你只需要10位有效数字。

  3. 最严重的问题:错误地循环输入。见Why is iostream::eof inside a loop condition considered wrong?。这可能会导致您将最后一个数字添加两次。循环输入流的正确方法是:

    while (fin >> val) {
         //do something with val.
    }