View Code of Problem 16

#include<bits/stdc++.h>
using namespace std;
string mapp[100001]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		char a[1001];
		//用于标记输出字母还是数字 
		int flag;
		cin>>flag;
		getchar();
		gets(a);
		string str=a;
		vector<string>v;
		vector<string>v2;
		
		//提取等式左边 
		int place1,place2;
		place1=str.find('+',0);
		string temp_left=str.substr(0,place1-1);
		istringstream stream(temp_left);
		string s;
		while(stream>>s)
		{
			v.push_back(s);
		}
		for(int i=0;i<v.size();i++)
		{
			for(int j=0;j<10;j++)
			{
				if(v[i]==mapp[j])
				{
					v[i]=j+'0';
				}
			}
		}
//		for(int i=0;i<v.size();i++)
//		{
//			cout<<v[i]<<" ";
//		}
		//提取等式右边的数字 
		place2=str.find('=',place1);
		string temp_right=str.substr(place1+2,place2-2-place1-1);
		istringstream stream2(temp_right);
		string s2;
		while(stream2>>s2)
		{
			v2.push_back(s2);
		}
		for(int i=0;i<v2.size();i++)
		{
			for(int j=0;j<10;j++)
			{
				if(v2[i]==mapp[j])
				{
					v2[i]=j+'0';
				}
			}
		}
//		for(int i=0;i<v2.size();i++)
//		{
//			cout<<v2[i]<<" ";
//		}

		string str1="",str2="";
		for(int i=0;i<v.size();i++)
		{
			str1+=v[i];
		}
		for(int i=0;i<v2.size();i++)
		{
			str2+=v2[i];
		}
		long long int num1=0,num2=0;
		for(int i=0;i<str1.size();i++)
		{
			num1*=10;
			num1+=str1[i]-'0';
		}
		for(int i=0;i<str2.size();i++)
		{
			num2*=10;
			num2+=str2[i]-'0';
		}
		
		
		if(flag==0)
		{
			printf("%d\n",num1+num2);
		}
		else
		{
			//int sum=num1+num2;
			string result=to_string(num1+num2);
			for(int i=0;i<result.size();i++)
			{
				cout<<mapp[result[i]-'0']<<" ";
			}
			cout<<endl;
		}				
	}
	
} 

Double click to view unformatted code.


Back to problem 16