View Code of Problem 16

#include <bits/stdc++.h>
using namespace std;
string str[10]={"zero","one","two","three","four","five","six","seven","eight","nine"}; 
map<string,string>m={{"zero","0"} ,{"one","1"},{"two","2"},{"three","3"},{"four","4"},{"five","5"},{"six","6"},{"seven","7"},{"eight","8"},{"nine","9"}};
vector<string> split(string s,char ch){
	int start=0;
	int len=0;
	vector<string>ret;
	for(int i=0;i<s.size();i++){
		if(s[i]==ch){
			ret.push_back(s.substr(start,len));
			start=i+1;
			len=0;
		}
		else{
			len++;
		}
	}
	if(start<s.length())
		ret.push_back(s.substr(start,len));
	return ret;
} 
void print(int sum){
	stack<int> s;
	while(sum){
		s.push(sum%10);
		sum/=10;
	}
	int flag=0;
	while(!s.empty()){
		int t=s.top();
		printf("%s",flag==0?"":" ");
		cout<<str[t];
		s.pop();
		flag=1;
	}
	cout<<endl;
}

int main(){
	int t,flag=1;
	string s;
	cin>>t;
	while(t--){
		cin>>flag;
		getchar();
		getline(cin,s);
		for(int i=0;i<10;i++){
			if(s.find(str[i])!=-1){
				s.replace(s.find(str[i]),str[i].size(),m[str[i]]);
			}
		}
		vector<string> v=split(s,' ');
		int j,a=0,b=0;
		for(j=0;j<v.size();j++)
			if(v[j]!="+") a=a*10+stoi(v[j]);
			else break;
		for(j=j+1;j<v.size();j++){
			if(v[j]!="=") b=b*10+stoi(v[j]);
		}
		int sum=a+b;
		if(flag==1){
			print(sum);
		}
		else 
			cout<<sum<<endl;
	}
} 

Double click to view unformatted code.


Back to problem 16