tôi đang làm dự án Euler # 22:Trình biên dịch cung cấp cho câu trả lời khác nhau cho Dự án Euler # 22
Sử dụng names.txt (nhấp chuột phải và 'Save Link/Target As ...'), một văn bản 46K tệp chứa hơn năm nghìn tên đầu tiên, bắt đầu bằng cách sắp xếp nó thành thứ tự chữ cái. Sau đó, tính toán giá trị theo thứ tự chữ cái cho mỗi tên, nhân giá trị này theo vị trí chữ cái của nó trong danh sách để có được điểm số tên.
Ví dụ: khi danh sách được sắp xếp theo thứ tự bảng chữ cái, COLIN, trị giá 3 + 15 + 12 + 9 + 14 = 53, là tên 938 trong danh sách . Vì vậy, COLIN sẽ có được số điểm là 938 × 53 = 49714.
Tổng số điểm tên trong tệp là bao nhiêu?
Biên dịch mã của tôi bên dưới với trình biên dịch gcc-g ++ của Cygwin, câu trả lời là 871129635
. Nhưng với Visual Studio 2008, câu trả lời là chính xác, 871198282
. Tại sao điều này là trường hợp?
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
bool strCmp(string x, string y) {
if(x.compare(y) == -1)
return true;
else
return false;
}
int getScore(string s) {
int score = 0;
for(unsigned int i = 0; i < s.length(); i++)
score += (((int) s.at(i)) - 64);
return score;
}
int getTotalScore(vector<string> names) {
int total = 0;
for(unsigned int i = 0; i < names.size(); i++)
total += (getScore(names[i]) * (i+1));
return total;
}
int main() {
vector<string> names;
ifstream namesFile("names.txt");
char curChar;
string curName = "";
//get names from file
if(namesFile.is_open()) {
while(!namesFile.eof()) {
curChar = namesFile.get();
if(isalpha(curChar))
curName.push_back(curChar);
else {
if(!curName.empty()) {//store finished name
names.push_back(curName);
curName.clear();
}
}
}
}
namesFile.close();
//alphabetize
sort(names.begin(), names.end(), strCmp);
//count up name scores
cout << getTotalScore(names) << endl;
return 0;
}
Trong hàm strCmp của bạn, tại sao bạn so sánh kết quả của hàm so sánh với -1? Không có lời hứa rằng so sánh sẽ trả lại một số cụ thể, chỉ là nó sẽ trả về một số âm nếu 'lhs