这题用个map容器和sstream里面的输入输出流对象,就可以了;
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
#include <iostream>
#include <map>
#include <string>
#include <sstream>
using namespace std;
int main()
{
map<string,int> sum;
sum["one"]=1;
sum["two"]=2;
sum["three"]=3;
sum["four"]=4;
sum["five"]=5;
sum["six"]=6;
sum["seven"]=7;
sum["eight"]=8;
sum["nine"]=9;
sum["zero"]=0;
char ch1[100];
while(gets(ch1))
{
bool flag=true;
string ss=ch1;
if(ss=="zero + zero =")
break;
int num1[3]={0},num2[3]={0};//用来保存把英文单词转化成数字后的数
istringstream is(ch1);
string str;
int i=0;
int j=0;
while(is>>str)//忽略空格直接把一个个的单词存到str里面
{
if(flag==false&&str!="=")
{
num2[j]=sum[str];
j++;
}
if(str=="+")
flag=false;
if(str!="="&&flag==true)
{
num1[i]=sum[str];
i++;
}
}
if(i==1&&j==1)//四种情况前面一个数有一个十位或个位为零后面一个数十位或各位为零;2*2=4;
cout<<num1[0]+num2[0]<<endl;
if(i==2&&j==1)
cout<<num1[0]*10+num1[1]+num2[0]<<endl;
if(i==2&&j==2)
cout<<num1[0]*10+num1[1]+num2[0]*10+num2[1]<<endl;
if(i==1&&j==2)
cout<<num1[0]+num2[0]*10+num2[1]<<endl;
}
return 0;
}