#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
map<string, int> words; // STL, 建立string到int的映射
words["zero"] = 0;
words["one"] = 1;
words["two"] = 2;
words["three"] = 3;
words["four"] = 4;
words["five"] = 5;
words["six"] = 6;
words["seven"] = 7;
words["eight"] = 8;
words["nine"] = 9;
words["ten"] = 10;
words["eleven"] = 11;
words["twelve"] = 12;
words["thirteen"] = 13;
words["fourteen"] = 14;
words["fifteen"] = 15;
words["sixteen"] = 16;
words["seventeen"] = 17;
words["eighteen"] = 18;
words["nineteen"] = 19;
words["twenty"] = 20;
words["thirty"] = 30;
words["forty"] = 40;
words["fifty"] = 50;
words["sixty"] = 60;
words["seventy"] = 70;
words["eighty"] = 80;
words["ninety"] = 90;
words["hundred"] = 100;
words["thousand"] = 1000;
words["million"] = 1000000;
string word[20];
while(cin >> word[0])
{
int totalWord = 1;
while(cin.peek() != '\n') // 看看是不是该换行了
{
cin >> word[totalWord++];
}
int i, j, negative = 1, m = 0;
int num[20] = {0};
for(i = 0; i < totalWord; i++) // 转存数值数组
{
if(word[i] == "negative")
{
negative = -1;
continue;
}
num[m++] = words[word[i]];
}
int result = 0;
// 下面算法的核心在于1, 当一个数比前一个数大的时候,这个数肯定是100, 1000, 或 1000000
// 2, 如果已经得到的结果比这个数小的话, 那么一定要把已经得到的结果放大100, 1000, 1000000倍
// 3, 如果比这个数大的话,就把前面的数取余的部分放大再加回去
// 4, 一些繁琐的小细节
for(i = 0; i < m; i++)
{
{
if(num[i] > result && result != 0)
result *= num[i];
else if(num[i] > result && result == 0)
result += num[i];
else
{
if(num[i] == 100)
{
int t = result % 1000;
result -= t;
result += t * 100;
}
else if(num [i] == 1000)
{
int t = result % 1000000;
result -= t;
result += t * 1000;
}
else result += num[i];
}
}
}
result *= negative;
cout << result << endl;
}
}
外星人翻译用数字转换模块
最新推荐文章于 2018-11-03 17:27:00 发布