题意:给出一个数字的英文读法,输出相应的数字
思路:模拟
代码如下:
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <map>
#include <string>
#include <queue>
#include <bitset>
#include<assert.h>
using namespace std;
string ten[20]={ "zero", "one", "two",
"three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven",
"twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen",
"eighteen", "nineteen"};
string dten[20] ={
"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
int main()
{
// freopen("data.txt","r",stdin);
map<string,int> mp;
for(int i=0;i<20;++i){
mp[ten[i]]=i;
}
for(int i=0;i<8;++i){
mp[dten[i]] = 20+i*10;
}
int T;
scanf("%d",&T);
getchar();
while(T--){
char s[200];
cin.getline(s,200,'\n');
// cout<<s<<endl;
int len = strlen(s);
s[len]=' ';
len++;
string sav;
int ans=0;
int tmp=0;
for(int i=0;i<len;++i){
if(s[i]==' '){
// cout<<sav<<' '<<mp[sav]<<endl;
if(sav == "million"){
ans+=tmp*1000000;
tmp=0;
} else if(sav =="thousand"){
ans+=tmp*1000;
tmp=0;
} else if(sav == "hundred"){
tmp*=100;
} else {
tmp = tmp+mp[sav];
}
sav.clear();
} else {
sav += s[i];
}
}
ans+=tmp;
printf("%d\n",ans);
}
return 0;
}