Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5597 | Accepted: 2203 |
Description
In this problem, you will be given one or more integers in English. Your task is to translate these numbers into their integer representation. The numbers can range from negative 999,999,999 to positive 999,999,999. The following is an exhaustive list of English words that your program must account for:
negative, zero, one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety, hundred, thousand, million
negative, zero, one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, thirty, forty, fifty, sixty, seventy, eighty, ninety, hundred, thousand, million
Input
The input consists of several instances. Notes on input:
The input is terminated by an empty line.
- Negative numbers will be preceded by the word negative.
- The word "hundred" is not used when "thousand" could be. For example, 1500 is written "one thousand five hundred", not "fifteen hundred".
The input is terminated by an empty line.
Output
The answers are expected to be on separate lines with a newline after each.
Sample Input
six negative seven hundred twenty nine one million one hundred one eight hundred fourteen thousand twenty two
Sample Output
6 -729 1000101 814022
Source
CTU Open 2004,UVA 486
问题链接:POJ2121 ZOJ2311 Inglish-Number Translator
问题简述:(略)
问题分析:(略)程序说明:
这个问题可以用两种方法解决,一是字符串比较,二是使用map。
程序需要一个单词一个单词(空格隔开)读入处理。读到换行时,一行结束,计算出结果。
使用函数getchar()读入一个单词后面的字符,如果是行结束符号,则一行结束。
题记:(略)
参考链接:(略)
/* POJ2121 ZOJ2311 Inglish-Number Translator */
#include <iostream>
#include <stdio.h>
#include <map>
using namespace std;
int main()
{
string s;
int ans, sum, flag, a;
char c;
map<string, int> m;
m["negative"] = -1;
m["zero"] = 0;
m["one"] = 1;
m["two"] = 2;
m["three"] = 3;
m["four"] = 4;
m["five"] = 5;
m["six"] = 6;
m["seven"] = 7;
m["eight"] = 8;
m["nine"] = 9;
m["ten"] = 10;
m["eleven"] = 11;
m["twelve"] = 12;
m["thirteen"] = 13;
m["fourteen"] = 14;
m["fifteen"] = 15;
m["sixteen"] = 16;
m["seventeen"] = 17;
m["eighteen"] = 18;
m["nineteen"] = 19;
m["twenty"] = 20;
m["thirty"] = 30;
m["forty"] = 40;
m["fifty"] = 50;
m["sixty"] = 60;
m["seventy"] = 70;
m["eighty"] = 80;
m["ninety"] = 90;
m["hundred"] = 100;
m["thousand"] = 1000;
m["million"] = 1000000;
ans = sum = flag = 0;
while(cin >> s) {
a = m[s];
if(a == -1)
flag = 1;
else if(a == 100)
sum *= 100;
else if(a == 1000 || a == 1000000) {
ans += sum * a;
sum=0;
} else
sum += a;
if((c = getchar()) == '\n') {
if(flag==1)
cout << -(ans + sum) << endl;
else
cout << ans + sum << endl;
ans = sum = flag = 0;
}
}
return 0;
}
AC的C++语言程序如下(字符串比较):
/* POJ2121 ZOJ2311 Inglish-Number Translator */
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
string s;
int ans, sum, flag;
char c;
ans = sum = flag = 0;
while(cin >> s) {
if(s == "negative")
flag=1;
else if(s == "zero")
sum += 0;
else if(s == "one")
sum += 1;
else if(s == "two")
sum += 2;
else if(s == "three")
sum += 3;
else if(s == "four")
sum += 4;
else if(s == "five")
sum += 5;
else if(s == "six")
sum += 6;
else if(s == "seven")
sum += 7;
else if(s == "eight")
sum += 8;
else if(s == "nine")
sum += 9;
else if(s == "ten")
sum += 10;
else if(s == "eleven")
sum += 11;
else if(s == "twelve")
sum += 12;
else if(s == "thirteen")
sum += 13;
else if(s == "fourteen")
sum += 14;
else if(s == "fifteen")
sum += 15;
else if(s == "sixteen")
sum += 16;
else if(s == "seventeen")
sum += 17;
else if(s == "eighteen")
sum += 18;
else if(s == "nineteen")
sum += 19;
else if(s == "twenty")
sum += 20;
else if(s == "thirty")
sum += 30;
else if(s == "forty")
sum += 40;
else if(s == "fifty")
sum += 50;
else if(s == "sixty")
sum += 60;
else if(s == "seventy")
sum += 70;
else if(s == "eighty")
sum += 80;
else if(s == "ninety")
sum += 90;
else if(s == "hundred")
sum *= 100;
else if(s == "thousand") {
ans += sum * 1000;
sum=0;
} else if(s == "million") {
ans += sum * 1000000;
sum = 0;
}
if((c = getchar()) == '\n') {
if(flag==1)
cout << -(ans + sum) << endl;
else
cout << ans + sum << endl;
ans = sum = flag = 0;
}
}
return 0;
}