202260228abc • 2年前
using namespace std; int Cmp(string add1,string add2) { if(add1.length()!=add2.length())
return add1.length()>add2.length();
return add1>add2; } string Add(string add1,string add2) { string ans(max(add1.size(),add2.size())+1,'0'); for(int i=ans.size()-1,l1=add1.size(),l2=add2.size(); i>=0; i--) {
int t=(ans[i]-'0')+(l1<1?0:add1[--l1]-'0')+
(l2<1?0:add2[--l2]-'0');
ans[i]=t%10+'0';
ans[i-1]=(ans[i-1]-'0'+t/10)+'0';
} for(; ans[0]=='0'&&ans.size()>1; ans.erase(0,1)); return ans; } string Sub(string x,string y) { string ans=""; int i; for(i=y.length(); i<x.length(); i++) y='0'+y; for(i=x.length()-1; i>=0; i--) {
char c=x[i]-y[i]+'0';
if(c<'0')
{
x[i-1]--;
c+=10;
}
ans=c+ans;
} return ans; } int main() { string add1,add2; cin>>add1>>add2; bool b1=true,b2=true; if(add1[0]=='-')
add1.erase(0,1),b1=false;
if(add2[0]=='-')
add2.erase(0,1),b2=false;
if(b1==b2) {
if(!b1)
cout<<'-';
string ans=Add(add1,add2);
for(; ans[0]=='0'&&ans.size()>1; ans.erase(0,1));
cout<<ans<<endl;
} else {
bool b=b1;
if(!Cmp(add1,add2))
swap(add1,add2),b=b2;
if(!b)
cout<<'-';
string ans=Sub(add1,add2);
for(; ans[0]=='0'&&ans.size()>1; ans.erase(0,1));
cout<<ans<<endl;
} return 0; }
评论:
using namespace std; int Cmp(string add1,string add2) { if(add1.length()!=add2.length())
return add1.length()>add2.length();
return add1>add2; } string Add(string add1,string add2) { string ans(max(add1.size(),add2.size())+1,'0'); for(int i=ans.size()-1,l1=add1.size(),l2=add2.size(); i>=0; i--) {
int t=(ans[i]-'0')+(l1<1?0:add1[--l1]-'0')+
(l2<1?0:add2[--l2]-'0');
ans[i]=t%10+'0';
ans[i-1]=(ans[i-1]-'0'+t/10)+'0';
} for(; ans[0]=='0'&&ans.size()>1; ans.erase(0,1)); return ans; } string Sub(string x,string y) { string ans=""; int i; for(i=y.length(); i<x.length(); i++) y='0'+y; for(i=x.length()-1; i>=0; i--) {
char c=x[i]-y[i]+'0';
if(c<'0')
{
x[i-1]--;
c+=10;
}
ans=c+ans;
} return ans; } int main() { string add1,add2; cin>>add1>>add2; bool b1=true,b2=true; if(add1[0]=='-')
add1.erase(0,1),b1=false;
if(add2[0]=='-')
add2.erase(0,1),b2=false;
if(b1==b2) {
if(!b1)
cout<<'-';
string ans=Add(add1,add2);
for(; ans[0]=='0'&&ans.size()>1; ans.erase(0,1));
cout<<ans<<endl;
} else {
bool b=b1;
if(!Cmp(add1,add2))
swap(add1,add2),b=b2;
if(!b)
cout<<'-';
string ans=Sub(add1,add2);
for(; ans[0]=='0'&&ans.size()>1; ans.erase(0,1));
cout<<ans<<endl;
} return 0; }