View Code of Problem 132

#include<bits/stdc++.h>
using namespace std;
vector<int> ff(string s){
	vector<int> k;
	for(int i=0;i<s.size();++i){
		k.push_back(s[i]-48);
	}
	return k;
}
void suan(vector<int> &aa11,vector<int> &bb11,int cha){
		for(int i=bb11.size()-1;i>=cha;--i){
			bb11[i]+=aa11[i-cha];
			if(i!=0){
				bb11[i-1]+=bb11[i]/10;
				bb11[i]%=10;
			}
		}
		for(int i=cha;i>0;--i){
			bb11[i-1]+=bb11[i]/10;
			bb11[i]%=10;
		}
}
void suanxiaoshu(vector<int> &aa22,vector<int> &bb22){
		int xiaoshu=min(aa22.size(),bb22.size());
		for(int i=xiaoshu-1;i>0;--i){
			aa22[i]+=bb22[i];
			aa22[i-1]+=aa22[i]/10;
			aa22[i]%=10;
		}
		aa22[0]+=bb22[0];
		for(int i=aa22.size();i<bb22.size();++i){
			aa22.push_back(bb22[i]);
		}
}
int main(){
	string a,b;
	while(cin>>a>>b){
		stack<int> p;
		vector<int> aa11,aa22,bb11,bb22;
		string aa1,aa2,bb1,bb2;
		for(int i=0;i<a.size();++i){
			if(a[i]=='.'){
				aa1=a.substr(0,i);
				aa2=a.substr(i+1);
			}
		}
		for(int i=0;i<b.size();++i){
			if(b[i]=='.'){
				bb1=b.substr(0,i);
				bb2=b.substr(i+1);
			}
		}
		if(aa1==""){
			aa1=a;
			aa2="0";
		}
		if(bb1==""){
			bb1=b;
			bb2="0";
		}
		aa11=ff(aa1);
		aa22=ff(aa2);
		bb11=ff(bb1);
		bb22=ff(bb2);
		suanxiaoshu(aa22,bb22);
		if(aa22[0]>=10){
			aa11[aa11.size()-1]+=aa22[0]/10;
			aa22[0]%=10;
		}
		int m1=aa11.size();
		int m2=bb11.size();
		if(m1<=m2){
			suan(aa11,bb11,m2-m1);
		}else{
			suan(bb11,aa11,m1-m2);
		}
		int flag1=0,flag2=0;
		for(int i=0;i<bb11.size();++i){
			if(bb11[i]!=0) flag1=1;
			if(flag1) cout<<bb11[i];
		}
		if(flag1==0) cout<<"0";
		for(int i=0;i<aa22.size();++i){
			if(aa22[i]!=0) flag2=1;
		}
		if(flag2){
			cout<<".";
			for(int i=0;i<aa22.size();++i){
				if(aa22[i]==0) p.push(aa22[i]);
				else{
					while(!p.empty()){
						cout<<p.top();
						p.pop();
					}
					cout<<aa22[i];
				}
			}	
		}
		cout<<endl;
	}
}

Double click to view unformatted code.


Back to problem 132