题目描述
读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出.
输入描述:
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
输出描述:
对每个测试用例输出1行,即A+B的值.
示例1
输出
复制3 90
96
#include<iostream>//有一些题目看似很简单,但是在输入的时候需要用到字符串处理的函数,将操作数分离开,通常情况下如果不是
#include<map>//数,是很多不同的属性可以用struct。
#include<string.h>
using namespace std;
map<string,int>mp;
void init()
{
mp["zero"]=0;
mp["one"]=1;
mp["two"]=2;
mp["three"]=3;
mp["four"]=4;
mp["five"]=5;
mp["six"]=6;
mp["seven"]=7;
mp["eight"]=8;
mp["nine"]=9;
}
int main()
{
string num1,num2;
string s;
init();
while(getline(cin,s))
{
int x,y;
int pos1=s.find('+'); //find函数可以有两个参数,第二个参数可以是查找某个字符的开始位置。
int pos2=s.find('=');
string str1=s.substr(0,pos1-1); //从一个字符串中分割一个子串,第一参数含义是开始的下标,第二个参数是子串的长度!!!
string str2=s.substr(pos1+2,pos2-pos1-3);
if(str1.find(' ')==string::npos)
x=mp[str1];
else
{
int pos3=str1.find(' ');
string s1=str1.substr(0,pos3);
string s2=str1.substr(pos3+1);
x=mp[s1]*10+mp[s2];//不会超过100
}
if(str2.find(' ')==string::npos)
y=mp[str2];
else
{
int pos3=str2.find(' ');
string s1=str2.substr(0,pos3);
string s2=str2.substr(pos3+1);
y=mp[s1]*10+mp[s2];//不会超过100
}
if(x+y==0)cout<<"0";break;
else cout<<x+y<<endl;
}
}