欧拉 #13 c++ 项目

project Euler #13 c++

本文关键字:项目 c++ 欧拉      更新时间:2023-10-16

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. 从 1 开始求和,尽管这不太可能改变您的结果。

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

  3. 最严重的问题:错误地循环输入。请参阅为什么循环条件中的 iostream::eof 被认为是错误的?。这可能会导致您添加最后一个数字两次。循环输入流的正确方法是:

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