http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=14910
给出 数字的英文
翻译成阿拉伯数字
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
using namespace std;
char tm[1005];
map<string,int> sb;
char word[1005];
string he="and";
map<string,int> shuzi;
string ss[1005];
int cun=0;
int ans=0;
int main()
{
int deal_num();
string million="million";
string one="one";
string two="two";
string three="three";
string four="four";
string five="five";
string six="six";
string seven="seven";
string eight="eight";
string nine="nine";
string ten="ten";
string eleven="eleven";
string twelve="twelve";
string thirteen="thirteen";
string fourteen="fourteen";
string fifteen="fifteen";
string sixteen="sixteen";
string seventeen="seventeen";
string eighteen="eighteen";
string nineteen="nineteen";
string twenty="twenty";
string thirty="thirty";
string forty="forty";
string fifty="fifty";
string sixty="sixty";
string seventy="seventy";
string eighty="eighty";
string ninety="ninety";
string thousand ="thousand";
string hundred ="hundred";
sb.insert(make_pair(million,1));
sb.insert(make_pair(thousand,1));
shuzi.insert(make_pair(one,1));
shuzi.insert(make_pair(two,2));
shuzi.insert(make_pair(three,3));
shuzi.insert(make_pair(four,4));
shuzi.insert(make_pair(five,5));
shuzi.insert(make_pair(six,6));
shuzi.insert(make_pair(seven,7));
shuzi.insert(make_pair(eight,8));
shuzi.insert(make_pair(nine,9));
shuzi.insert(make_pair(ten,10));
shuzi.insert(make_pair(eleven,11));
shuzi.insert(make_pair(twelve,12));
shuzi.insert(make_pair(thirteen,13));
shuzi.insert(make_pair(fourteen,14));
shuzi.insert(make_pair(fifteen,15));
shuzi.insert(make_pair(sixteen,16));
shuzi.insert(make_pair(seventeen,17));
shuzi.insert(make_pair(eighteen,18));
shuzi.insert(make_pair(nineteen,19));
shuzi.insert(make_pair(twenty,20));
shuzi.insert(make_pair(thirty,30));
shuzi.insert(make_pair(forty,40));
shuzi.insert(make_pair(fifty,50));
shuzi.insert(make_pair(sixty,60));
shuzi.insert(make_pair(seventy,70));
shuzi.insert(make_pair(eighty,80));
shuzi.insert(make_pair(ninety,90));
shuzi.insert(make_pair(hundred,100));
int t;
cin>>t;
getchar();
while(t--)
{
ans=0;
gets(tm);
int len=strlen(tm);
int j=0;
cun=0;
int i;
int again=0;
for (i=0;i<=len;i++)
{
if (tm[i]==' '||i==len)
{
word[j]=0;
string tmp=word;
if (i==len)
{
if (tmp!=million&&tmp!=thousand)
again=1;
}
if (sb.find(tmp)!=sb.end())
{
if (tmp==million )
ans+=deal_num()*1000000;
else
if (tmp==thousand)
ans+=deal_num()*1000;
else
ans+=deal_num();
cun=0;
}
else
{
ss[cun++]=word;
}
j=0;
}
else
word[j++]=tm[i];
}
if (again)
ans+=deal_num();
printf("%d\n",ans);
}
return 0;
}
int cal(int i,int j)
{
int k;
int sum=0;
for (k=i;k<=j;k++)
{
int num=shuzi[ss[k]];
if (num==100)
sum*=100;
else
sum+=num;
}
return sum;
}
int deal_num()
{
int i;
int sum=0;
int has_and=0;
int and_idx=0;
for (i=0;i<cun;i++)
{
if (has_and==1)
{
if (ss[i]==he)
{
sum+=cal(and_idx+1,i-1);
and_idx=i;
}
else
if (i==cun-1)
{
sum+=cal(and_idx+1,cun-1);
}
else
continue;
}
if (ss[i]==he)
{
sum+=cal(0,i-1);
has_and=1;
and_idx=i;
}
}
if (has_and==0)
{
sum+=cal(0,cun-1);
}
return sum;
}