#include <iostream>
#include <vector>
#include<string>
#include<algorithm>
using namespace std;
string add(string a1,string a2) //符号相同时加法的运算
{
int length1=a1.size();
int length2=a2.size();
int maxLength=length1>length2 ? length1:length2;
bool isNegative=false;
string result(maxLength+2,'0'); //可能会产生进位
result[maxLength+1]='\0';
if(a1[0]=='-'&&a2[0]=='-') //判断两数都为正还是都为负
isNegative=true;
int sum=0;
bool flag=0;
int i,j;
int k=maxLength;
for( i=length1-1,j=length2-1;i>=0&&j>=0;i--,j--) //利用字符实现整数加法含进位
{
if((a1[i]=='-')||(a2[j]=='-'))
{
break;
}
sum=a1[i]-'0'+a2[j]-'0'+flag;
if(sum>=10)
{
flag=1;
sum-=10;
result[k]=sum+'0';
k--;
}
else
{
result[k]=sum+'0';
flag=0;
k--;
}
}
for(;i>=0 && a1[i]!='-';i--) //a1 长
{
sum=a1[i]-'0'+flag;
if(sum>=10)
{
flag=1;
sum-=10;
result[k]=sum+'0';
k--;
}
else
{
result[k]=sum+'0';
flag=0;
k--;
}
}
for(;j>=0 && a2[j]!='-';j--) //a2 长
{
sum=a2[j]-'0'+flag;
if(sum>=10)
{
flag=1;
sum-=10;
result[k]=sum+'0';
k--;
}
else
{
result[k]=sum+'0';
flag=0;
k--;
}
}
if(flag==1)
{
if(k>=0)
result[k]='1';
}
else
result.erase(0,1);
if(isNegative)
result[0]='-';
return result;
}
string sub(string a1,string a2) //符号相异时实现加法运算,也就是减法
{
int length1=a1.size();
int length2=a2.size();
string result1;
string Max,Min;
bool formerbig=true;
bool formerNegative=false; //判断前面的数的绝对值是否比后面的大,并且记录前面的时正数还是负数
if(a1[0]=='-')
{
formerNegative=true;
string b1(a1);
b1.erase(0,1);
//cout<<"**********************************************"<<endl;
//cout<<b1<<endl;
int compareA1A2;
if(b1.size()==a2.size())
{
compareA1A2=b1.compare(a2);
}
else if(b1.size()>a2.size())
{
compareA1A2=1;
}
else
compareA1A2=-1;
if(compareA1A2==0)
{
result1.push_back('0');
return result1;
}
else if(compareA1A2<0)
{
formerbig=false;
Max=a2;
Min=b1;
}
else
{
Max=b1;
Min=a2;
}
// cout<<"Max:"<<Max<<" "<<"Min: "<<Min<<endl; 找出绝对值大的和绝对值小的
}
if(a2[0]=='-')
{
formerNegative=false;
string b2(a2);
b2.erase(0,1);
int compareA1A2;
if(b2.size()==a1.size())
{
compareA1A2=b2.compare(a1);
}
else if(b2.size()>a1.size())
{
compareA1A2=1;
}
else
compareA1A2=-1;
if(compareA1A2==0)
{
result1.push_back('0');
return result1;
}
else if(compareA1A2>0)
{
formerbig=false;
Max=b2;
Min=a1;
}
else
{
Max=a1;
Min=b2;
}
}
int MaxLength=Max.size();
int MinLength=Min.size();
string result(MaxLength+1,'0');
result[MaxLength]='\0';
int flag=0;
int subtract=0;
int i,j;
int k=MaxLength-1;
int maxwei,minwei;
for(i=MaxLength-1,j=MinLength-1;i>=0&&j>=0;i--,j--)
{
maxwei=Max[i]-'0';
minwei=Min[j]-'0';
if(maxwei-flag>=minwei)
{
subtract=maxwei-minwei-flag;
flag=0;
}
else
{
maxwei+=10;
subtract=maxwei-minwei-flag;
flag=1;
}
result[k--]=subtract+'0';
}
for(;i>=0;i--)
{
maxwei=Max[i]-'0';
if(maxwei-flag>=0)
{
subtract=maxwei-flag;
flag=0;
}
else
{
maxwei+=10;
subtract=maxwei-flag;
flag=1;
}
result[k--]=subtract+'0';
}
cout<<"result:"<<result<<endl;
string::iterator del_zero=result.begin();
int count=0;
for(i=0;i<(int)result.size();i++)
{
if(result[i]=='0')
count++;
else
break;
}
if(count>0)
result.erase(del_zero,del_zero+count); //去除结果前面的0
if(formerbig) // 再得到结果前插入符号
{
if(!formerNegative)
return result;
else
{
string::iterator first_pos=result.begin();
result.insert(first_pos,'-');
return result;
}
}
else
{
if(!formerNegative)
{
string::iterator first_pos=result.begin();
result.insert(first_pos,'-');
return result;
}
else
return result;
}
}
string add_lei(string a1,string a2) //调用前面两个函数实现真正的加法运算
{
string result;
if(a1[0]=='-')
{
if(a2[0]=='-')
result=add(a1,a2);
else
result=sub(a1,a2);
}
else
{
if(a2[0]=='-')
result=sub(a1,a2);
else
result=add(a1,a2);
}
return result;
}
int main(void)
{
while(1)
{
string a1,a2;
string result;
cin>>a1>>a2;
cout<<endl;
cout<<a1<<" "<<a2<<endl;
result=add_lei(a1,a2);
cout<<result<<endl;
}
return 0;
}
#include <vector>
#include<string>
#include<algorithm>
using namespace std;
string add(string a1,string a2) //符号相同时加法的运算
{
int length1=a1.size();
int length2=a2.size();
int maxLength=length1>length2 ? length1:length2;
bool isNegative=false;
string result(maxLength+2,'0'); //可能会产生进位
result[maxLength+1]='\0';
if(a1[0]=='-'&&a2[0]=='-') //判断两数都为正还是都为负
isNegative=true;
int sum=0;
bool flag=0;
int i,j;
int k=maxLength;
for( i=length1-1,j=length2-1;i>=0&&j>=0;i--,j--) //利用字符实现整数加法含进位
{
if((a1[i]=='-')||(a2[j]=='-'))
{
break;
}
sum=a1[i]-'0'+a2[j]-'0'+flag;
if(sum>=10)
{
flag=1;
sum-=10;
result[k]=sum+'0';
k--;
}
else
{
result[k]=sum+'0';
flag=0;
k--;
}
}
for(;i>=0 && a1[i]!='-';i--) //a1 长
{
sum=a1[i]-'0'+flag;
if(sum>=10)
{
flag=1;
sum-=10;
result[k]=sum+'0';
k--;
}
else
{
result[k]=sum+'0';
flag=0;
k--;
}
}
for(;j>=0 && a2[j]!='-';j--) //a2 长
{
sum=a2[j]-'0'+flag;
if(sum>=10)
{
flag=1;
sum-=10;
result[k]=sum+'0';
k--;
}
else
{
result[k]=sum+'0';
flag=0;
k--;
}
}
if(flag==1)
{
if(k>=0)
result[k]='1';
}
else
result.erase(0,1);
if(isNegative)
result[0]='-';
return result;
}
string sub(string a1,string a2) //符号相异时实现加法运算,也就是减法
{
int length1=a1.size();
int length2=a2.size();
string result1;
string Max,Min;
bool formerbig=true;
bool formerNegative=false; //判断前面的数的绝对值是否比后面的大,并且记录前面的时正数还是负数
if(a1[0]=='-')
{
formerNegative=true;
string b1(a1);
b1.erase(0,1);
//cout<<"**********************************************"<<endl;
//cout<<b1<<endl;
int compareA1A2;
if(b1.size()==a2.size())
{
compareA1A2=b1.compare(a2);
}
else if(b1.size()>a2.size())
{
compareA1A2=1;
}
else
compareA1A2=-1;
if(compareA1A2==0)
{
result1.push_back('0');
return result1;
}
else if(compareA1A2<0)
{
formerbig=false;
Max=a2;
Min=b1;
}
else
{
Max=b1;
Min=a2;
}
// cout<<"Max:"<<Max<<" "<<"Min: "<<Min<<endl; 找出绝对值大的和绝对值小的
}
if(a2[0]=='-')
{
formerNegative=false;
string b2(a2);
b2.erase(0,1);
int compareA1A2;
if(b2.size()==a1.size())
{
compareA1A2=b2.compare(a1);
}
else if(b2.size()>a1.size())
{
compareA1A2=1;
}
else
compareA1A2=-1;
if(compareA1A2==0)
{
result1.push_back('0');
return result1;
}
else if(compareA1A2>0)
{
formerbig=false;
Max=b2;
Min=a1;
}
else
{
Max=a1;
Min=b2;
}
}
int MaxLength=Max.size();
int MinLength=Min.size();
string result(MaxLength+1,'0');
result[MaxLength]='\0';
int flag=0;
int subtract=0;
int i,j;
int k=MaxLength-1;
int maxwei,minwei;
for(i=MaxLength-1,j=MinLength-1;i>=0&&j>=0;i--,j--)
{
maxwei=Max[i]-'0';
minwei=Min[j]-'0';
if(maxwei-flag>=minwei)
{
subtract=maxwei-minwei-flag;
flag=0;
}
else
{
maxwei+=10;
subtract=maxwei-minwei-flag;
flag=1;
}
result[k--]=subtract+'0';
}
for(;i>=0;i--)
{
maxwei=Max[i]-'0';
if(maxwei-flag>=0)
{
subtract=maxwei-flag;
flag=0;
}
else
{
maxwei+=10;
subtract=maxwei-flag;
flag=1;
}
result[k--]=subtract+'0';
}
cout<<"result:"<<result<<endl;
string::iterator del_zero=result.begin();
int count=0;
for(i=0;i<(int)result.size();i++)
{
if(result[i]=='0')
count++;
else
break;
}
if(count>0)
result.erase(del_zero,del_zero+count); //去除结果前面的0
if(formerbig) // 再得到结果前插入符号
{
if(!formerNegative)
return result;
else
{
string::iterator first_pos=result.begin();
result.insert(first_pos,'-');
return result;
}
}
else
{
if(!formerNegative)
{
string::iterator first_pos=result.begin();
result.insert(first_pos,'-');
return result;
}
else
return result;
}
}
string add_lei(string a1,string a2) //调用前面两个函数实现真正的加法运算
{
string result;
if(a1[0]=='-')
{
if(a2[0]=='-')
result=add(a1,a2);
else
result=sub(a1,a2);
}
else
{
if(a2[0]=='-')
result=sub(a1,a2);
else
result=add(a1,a2);
}
return result;
}
int main(void)
{
while(1)
{
string a1,a2;
string result;
cin>>a1>>a2;
cout<<endl;
cout<<a1<<" "<<a2<<endl;
result=add_lei(a1,a2);
cout<<result<<endl;
}
return 0;
}