5:英语数字转换器
-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
在这个问题中,将用英语给你一个或多个整数。你的任务是将这些数字转换成整型表示。数字范围从-999,999,999到999,999,999.下面是你的程序必须考虑的详尽的英语单词表:
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
输入
-
输入包括多个样例,注意:
1.负数前面有词negative
2.当能用thousand的时候,将不用hundred。例如1500将写为"one thousand five hundred",而不是"fifteen hundred".
输入将以一个空行结束
输出
- 输出将是每一个单独一行,每一个后面一个换行符 样例输入
-
sixnegative seven hundred twenty nineone million one hundred oneeight hundred fourteen thousand twenty two
样例输出
-
6-7291000101814022
来源
- CTU Open 2004,UVA 486
-
-
#include<iostream> using namespace std; string s; string c[28]={"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"}; string d[3]={"hundred","thousand", "million"}; int e[28]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,40,50,60,70,80,90}; int f[3]={100,1000,1000000}; int main() { int n=0; int tepn=0; int sign=0; while(cin>>s) { if(s=="negative") { sign=1; continue; } for(int i=0;i<28;++i) { if(s==c[i]) { tepn+=e[i]; break; } } if(s=="million") { tepn*=f[2]; n+=tepn; tepn=0; } if(s=="thousand") { tepn*=f[1]; n+=tepn; tepn=0; } if(s=="hundred") { tepn*=f[0]; } if(cin.peek()=='\n') { n+=tepn; tepn=0; if(sign==1)cout<<(-n)<<endl; else cout<<n<<endl; n=0; sign=0; } } return 0; }