gpt4 book ai didi

c++ - 欧拉计划 #22 C++

转载 作者:行者123 更新时间:2023-11-30 04:15:09 25 4
gpt4 key购买 nike

我正在解决 C++ 中的项目欧拉问题,并且在问题 22 上使用我的代码。下面是我的 cpp,我得到的答案是 871202730,或者 4448 太高了。我输出了排序后的列表,并检查了一些名字分数是否计算正确,以及我的名字数量是否正确。希望这是简单的事情,我只需要一些新鲜的眼光来审视它。 Link to the question.

#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

int main() {
int sum = 0;
vector<string> names;
char name[50], junk[5];
string str;
ifstream inFile;
inFile.open("docs/names.txt");

while(!inFile.eof()) {
inFile.getline(junk, 50, '/"');
inFile.getline(name, 50, '/"');
stringstream sstr;
sstr << name;
sstr >> str;
names.push_back(str);
}

sort(names.begin(), names.end());

for(int i=0; i<names.size(); i++) {
int namesum = 0;
for(int j=0; j<names[i].size(); j++)
namesum += (names[i][j] - 64);
sum += (namesum*i);
}

cout << "Sum: " << sum << endl;
return 0;
}

最佳答案

当读取一个流时,直到输入操作试图读取超出文件末尾但失败时才会设置文件结束标志。这就是为什么你不能这样做

while (!inFile.eof()) { ... }

如果您这样做,输入操作将失败并且不会正确更新输入字符串。

相反,你应该这样做:

while(inFile.getline(junk, 50, '"') && inFile.getline(name, 50, '"')) { ... }

关于c++ - 欧拉计划 #22 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com