hdu1228——A+B

A + B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 14346    Accepted Submission(s): 8511


Problem Description
读入两个小于100的正整数A和B,计算A+B.
需要注意的是:A和B的每一位数字由对应的英文单词给出.
 

Input
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
 

Output
对每个测试用例输出1行,即A+B的值.
 

Sample Input
   
   
   
   
one + two = three four + five six = zero seven + eight nine = zero + zero =
 

Sample Output
3
90
96

水题一道,map存对应值即可!
#include<iostream>
#include<map>
using namespace std;
int add(string a,string b)
{
	map<string,int> num;
	num["one"]=1;num["two"]=2;
	num["three"]=3;num["four"]=4;
	num["five"]=5;num["six"]=6;
	num["seven"]=7;num["eight"]=8;
	num["nine"]=9;num["zero"]=0;
	int i,m=0,n=0;
	string tem;
	for(i=0;i<a.size();i++)
	{
		if(a[i]==' ') 
		{
			m=m*10+num[tem];
			tem.clear();
		}
		else tem+=a[i];
	}
	tem.clear();
	for(i=0;i<b.size();i++)
	{
		if(b[i]==' ') 
		{
			n=n*10+num[tem];
			tem.clear();
		}
		else tem+=b[i];
	}
	return m+n;
}
int main()
{
	string str;
	while(getline(cin,str))
	{
		int len=str.size();
		string a,b;int i,k;
		for(i=0;i<len;i++)
		{
			if(str[i]=='+') break;
			a+=str[i];
		}
		for(k=i+2;k<len;k++)
		{
			if(str[k]=='=') break;
			b+=str[k];
		}
		if(add(a,b)==0) break; 
		else cout<<add(a,b)<<endl;
	}
	return 0;
}

你可能感兴趣的:(博客,HDU)