同2971,现成代码稍微改两句就行了。。
#include<iostream>
#include<sstream>
#include<string>
#include<map>
using namespace std;
int main()
{
map<string, int> mp;
mp["zero"] = 0;
mp["one"] = 1;
mp["two"] = 2;
mp["three"] = 3;
mp["four"] = 4;
mp["five"] = 5;
mp["six"] = 6;
mp["seven"] = 7;
mp["eight"] = 8;
mp["nine"] = 9;
mp["ten"] = 10;
mp["eleven"] = 11;
mp["twelve"] = 12;
mp["thirteen"] = 13;
mp["fourteen"] = 14;
mp["fifteen"] = 15;
mp["sixteen"] = 16;
mp["seventeen"] = 17;
mp["eighteen"] = 18;
mp["nineteen"] = 19;
mp["twenty"] = 20;
mp["thirty"] = 30;
mp["forty"] = 40;
mp["fifty"] = 50;
mp["sixty"] = 60;
mp["seventy"] = 70;
mp["eighty"] = 80;
mp["ninety"] = 90;
string line, word;
while (getline(cin, line) && line != "")
{
istringstream is(line);
int thousand = 0, hundred = 0, million = 0, other = 0;
bool negative = false;
while (is >> word)
{
if (word == "negative")
negative = true;
else if (word == "hundred")
{
hundred = other * 100;
other = 0;
}
else if (word == "thousand")
{
thousand = (hundred + other) * 1000;
hundred = 0;
other = 0;
}
else if (word == "million")
{
million = (hundred + other) * 1000000;
hundred = 0;
other = 0;
}
else
other += mp[word];
}
int res = million + thousand + hundred + other;
cout << (negative ? -res : res) << endl;
}
return 0;
}