que estoy haciendo Proyecto Euler # 22:compiladores dan diferentes respuestas para Proyecto Euler # 22
Usando nombres.txt (clic derecho y 'Guardar enlace/destino como ...'), un texto 46K archivo que contiene más de cinco mil nombres, comience por ordenarlo en orden alfabético. Luego, calculando el valor alfabético de para cada nombre, multiplique este valor por su posición alfabética en la lista para obtener un puntaje de nombre.
Por ejemplo, cuando la lista está ordenada en orden alfabético, Colin, que vale 3 + 15 + 12 + 9 + 14 = 53, es el nombre 938a en la lista . Entonces, COLIN obtendría un puntaje de 938 × 53 = 49714.
¿Cuál es el total de todas las puntuaciones en el archivo?
Al compilar mi código a continuación con el compilador gcc-g ++ de Cygwin, la respuesta es 871129635
. Pero con Visual Studio 2008, la respuesta es correcta, 871198282
. ¿Por qué es este el caso?
#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;
}
En su función strCmp, ¿por qué compara el resultado de la función de comparación contra -1? No hay ninguna promesa de que comparar devolverá un número específico, solo que devolverá un número negativo si 'lhs