View Code of Problem 16

#include<iostream>
#include<string>
#include<map>
using namespace std;
map<string, int>mp;
map<int, string>mp1;

int main()
{
	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;mp["zero"]=0;
	mp1[1]="one";mp1[2]="two";mp1[3]="three";mp1[4]="four";mp1[5]="five";mp1[6]="six";mp1[7]="seven";mp1[8]="eight";mp1[9]="nine";mp1[0]="zero";
	int n,tag,pos1,i,pos2,num1,num2,len,start,end,cal[100],k,sum;
	string s,temp_s;
	cin>>n;
	while(n--){
		cin>>tag;
		getchar();
		getline(cin,s);
		pos1=s.find('+');
		pos2=s.find('=');
		
		k=0;
		//	cout<<pos1<<endl;
		//第一组数据的范围是:0,pos1-2;
		//第二组数据的范围是:pos1+2,pos2-2;
		
		
		//算第一个数字 
		i=0;
		num1=0;
		if(s[i]>='0'&&s[i]<='9'){//如果是数字
			for(i=0;i<=pos1-2;++i){
				num1=num1*10+(s[i]-'0');
			} 
		} else{//如果是字母,开始判断。直到遇到空格,或者输出结束。把找到的英语换算成数字,保存在数组当中 						
			for(i=0;i<=pos1-2;++i){				
				start=i;
				len=1;
				while(i<=pos1-2 && s[i]!=' '){
					i++;
					len++;
				}
				len--;
				temp_s=s.substr(start,len); 
				num1=num1*10+mp[temp_s]; 						
			}
					
		}
	//	cout<<num1<<endl;	
		//接下来开始算第二个数字
		i=pos1+2;
		num2=0;
		if(s[i]>='0'&&s[i]<='9'){//如果是数字
			for(i=0;i<=pos2-2;++i)	num2=num2*10+(s[i]-'0');							
		} else{//如果是字母,开始判断。直到遇到空格,或者输出结束。把找到的英语换算成数字,保存在数组当中 						
			for(i=pos1+2;i<=pos2-2;++i){				
				start=i;
				len=1;
				while(i<=pos2-2 && s[i]!=' '){
					i++;
					len++;
				}
				len--;
				temp_s=s.substr(start,len); 
				num2=num2*10+mp[temp_s]; 						
			}
		
		}	
			//cout<<num2<<endl;
		sum=num1+num2;
		if(tag==0)	cout<<sum<<endl;
		else{
			while(sum!=0){
				cal[k++]=sum%10;
				sum/=10;
			}
			for(i=k-1;i>=0;--i){
				if(i==k-1)	cout<<mp1[cal[i]];
				else	cout<<" "<<mp1[cal[i]];
			}
			cout<<endl;
		}	
		
	}
}
 

Double click to view unformatted code.


Back to problem 16