您的位置:首页 > 其它

NYOJ 594 还是A+B (模拟,考研机试题)

2015-01-06 22:57 211 查看
题目描述:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: