**A+B大数(正负)**

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

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

68932147586
468711654886

Sample Output

537643802472
#include<stdio.h>
#include<string.h>
#define MAX 10005
int main()
{
    char a[MAX],b[MAX];
    int c[MAX]={0};
    int T;
    int i,j,flag,flaga,flagb,singa,singb,f,n,m,t,k,p=0,s,len1,len2;


        flag=0;flaga=0;flagb=0;singa=1;singb=1;t=0;i=0;j=0;f=0;k=0;
        scanf("%s",a);
        scanf("%s",b);      
        len1=n=strlen(a);
        len2=m=strlen(b);
        if(a[0]=='-'&&b[0]=='-')
        {
            flag=1;
            flaga=flagb=1;          
        }  

        else if(a[0]=='-'||b[0]=='-')
        {
            if(a[0]=='-')
            {
                len1--;
                flaga=1;
            }

            if(b[0]=='-')
            {
                len2--;
                flagb=1;
            }

            if(len1>len2)
            singb=-1;
            else if(len1<len2)
            singa=-1;
            else
            {
                if(strcmp(&a[flaga],&b[flagb])>0)
                singb=-1;
                else if(strcmp(&a[flaga],&b[flagb])<0)
                singa=-1;
                else
                {
                    printf("0\n");
                    return 0;
                }
                if(flaga==1&&singb==-1)
                flag=1;
                else if(flagb==1&&singa==-1)
                flag=1;

            }
        }
       //作比较 


            for(i=n-1,j=m-1;i>=flaga||j>=flagb;i--,j--)
        {

            if(i>=flaga&&j>=flagb)              
                c[k++]=(a[i]-'0')*singa+(b[j]-'0')*singb+t;                 
            else if(i>=flaga&&j<flagb)
                c[k++]=(a[i]-'0')+t;
            else
                c[k++]=(b[j]-'0')+t;

            if(c[k-1]>9)
            {
                c[k-1]=c[k-1]%10;
                t=1;
            }

                else if(c[k-1]<0)
                    {
                       c[k-1]=c[k-1]+10;
                       t=-1;
                    }
                    else
                                t=0;

        }
        if(t==1)
        c[k]=t;
        while(!c[k]&&k)
        k--;
        if(flag)
        printf("-");
            for(i=k;i>=0;i--)
            printf("%d",c[i]);

        printf("\n");


    return 0;
} 

猜你喜欢

转载自blog.csdn.net/foolishpichao/article/details/81291476
A+B