51nod 大数相加(含负数)

给出2个大整数A,B,计算A+B的结果。

Input

 
   

第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数)

Output

 
   

输出A + B

Input示例

 
   

68932147586 468711654886

Output示例

 
   

537643802472


思路:都是正数就直接加,负数判断大小用大减小

下面贴上代码

#include <iostream>
using namespace std;
string A,B;
string jia(string a,string b)
{
    long long len1=a.size(),len2=B.size();
    if(a.size()<b.size())
    {
        swap(a,b);
        swap(len1,len2);
    }
    int x,y,flag=0,sum;
    while(len1>0)
    {
        x=a[len1-1]-'0';
        if(len2>0)
        y=b[len2-1]-'0';
        else y=0;
        sum=x+y+flag;
        if(sum>=10)
        {
            flag=1;
            a[len1-1]=sum%10+'0';
        }
        else
        {
            flag=0;
            a[len1-1]=sum%10+'0';
        }
        len1--;
        len2--;
    }
    if(flag==1) a="1"+a;
    return a;
}
string jian(string a,string b)
{
    long long len1=a.size(),len2=b.size();
    int x,y,sum,flag=0;
    while(len1>0)
    {
       x=a[len1-1]-'0';
       if(len2>0) y=b[len2-1]-'0';
       else y=0;
       sum=x-y+flag;
       if(sum<0)
       {
            flag=-1;
           a[len1-1]=(10+sum)+'0';
       }
       else
       {
           a[len1-1]=sum+'0';
           flag=0;
       }
       len1--;
       len2--;
    }
    int t=0;
    while(a[t]=='0')
    {
        a.erase(0,1);
    }
    if(a.size()==0) a="0";
    return a;
}
int main()
{
   ios::sync_with_stdio(false);
   cin>>A>>B;
   if(A[0]!='-'&&B[0]!='-')
   {
     cout<<jia(A,B)<<endl;
   }
    else if(A[0]=='-'&&B[0]=='-')
    {
        A.erase(0,1);
        B.erase(0,1);
        cout<<"-"<<jia(A,B)<<endl;
    }
    else if(A[0]=='-'&&B[0]!='-')
    {
        A.erase(0,1);
        int t1=A.size(),t2=B.size();
        if(t1>t2)
        {
            cout<<"-"<<jian(A,B)<<endl;
        }
        else if(t1<t2)
        {
            cout<<jian(B,A)<<endl;
        }
        else if(t1==t2)
        {
            if(A<=B) cout<<jian(B,A)<<endl;
            else if(A>B) cout<<"-"<<jian(A,B)<<endl;
        }
    }
    else if(A[0]!='-'&&B[0]=='-')
    {
        B.erase(0,1);
        int t1=A.size(),t2=B.size();
        if(t1>t2)
        {
            cout<<jian(A,B)<<endl;
        }
        else if(t1<t2)
        {
            cout<<"-"<<jian(B,A)<<endl;
        }
        else if(t1==t2)
        {
            if(A>=B) cout<<jian(A,B)<<endl;
            else if(A<B) cout<<"-"<<jian(B,A)<<endl;
        }
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/whyckck/article/details/80003306