题目描述:
http://acm.nyist.net/JudgeOnline/problem.php?pid=594
-
输入两个小于100的正整数A和B,输出A+B;A,B均为每位数字对应的英文字母,结果为十进制数。
-
输入
- A,B。 输出
- A+B; 样例输入
-
one + two = one + two zero =
样例输出
-
3 21
分析:
模拟问题,方法很多,看个人爱好。
AC代码:
#include<iostream>
#include<string>
#include<map>
using namespace std;
string a[]={"zero","one","two","three","four"
,"five","six","seven","eight","nine"};
int main()
{
map<string,int> num;
for(int i=0;i<10;i++){
num[a[i]]=i;
}
string s;
while(getline(cin,s)){
int n1,n2,ok=0,t=0;
string s1,s2;
n1=n2=0;
for(int i=0;i<s.size();i++){
if(!ok&&s[i]!=' '&&s[i]!='+'){
s1+=s[i];
}
else if(!ok&&s[i]==' '){
n1=n1*10+num[s1];
s1="";
}
else if(!ok&&s[i]=='+'){
ok=1;
}
else if(ok==1&&s[i]!=' '&&s[i]!='='){
s2+=s[i];
}
else if(ok==1&&s[i]==' '){
n2=n2*10+num[s2];
s2="";
}
else if(ok==1&&s[i]=='='){
//cout<<n1<<" "<<n2<<endl;
if(n1+n2) cout<<n1+n2<<endl;
else {t=1; break;}
}
}
if(t) break;
}
return 0;
}