大数加法------C语言代码实现(含负数)

两个符号相同的数,直接相加即可,所得结果符号不变;两数符号不同时,需要对两数的绝对值进行比较,结果的符号同绝对值较大者,值为较大者减去较小者。

 

以下是正确C语言源代码:

 

#include
#include
#include
using namespace std;
const int maxn = 10010;
char a[maxn],b[maxn];
int aa[maxn],bb[maxn];
int main()
{
   // freopen("a.txt","r",stdin);
    while(scanf("%s%s",a,b)!=EOF)
    {
        memset(aa,0,sizeof(aa));
        memset(bb,0,sizeof(bb));
        int l1=strlen(a),l2=strlen(b),i;
        int flag1=0,flag2=0;
        if(a[0]=='0'&&b[0]=='0') printf("0\n"); //特殊考虑a和b都为0的情况
        else
        {
            if(a[0]=='-')
            {
                flag1=1;  //判断 a是否是负数 是的话置标记
                for(i=0;i=10) {  bb[i]-=10; bb[i+1]++; }
                }
                while(!bb[l1]) l1--;
                for(;l1>=0;l1--) printf("%d",bb[l1]);
                printf("\n");
            }
            else if(!flag1&&flag2) //a为正数,b为负数
            {    //判断a,b的绝对值谁大谁小
                if(l1+1>l2) ans=1; //先判断长度
                else if(l1+1==l2) //长度相等,判断每一位的大小
                {
                    for(i=l1-1;i>=0;i--)
                    {
                        if(aa[i]>bb[i]) { ans=1;break;} //当前位大于  则a>b
                        else if(aa[i]=0;l1--) printf("%d",aa[l1]);
                    printf("\n");
                }
                else //a的绝对值小于b
                {
                    for(i=0;i=0;l2--) printf("%d",bb[l2]);
                        printf("\n");
                    }
                }
            }
            else if(flag1&&!flag2) //和上面同理
            {
                if(l2+1>l1) ans=1;
                else if(l2+1==l1)
                {
                    for(i=l2-1;i>=0;i--)
                    {
                        if(bb[i]>aa[i]) { ans=1;break;}
                        else if(bb[i]=0;l2--) printf("%d",bb[l2]);
                    printf("\n");
                }
                else
                {
                    for(i=0;i=0;l1--) printf("%d",aa[l1]);
                        printf("\n");
                    }
                }
            }
            else if(flag1&&flag2) //同为负数
            {
                printf("-");
                l1=max(l1,l2);
                for(i=0;i=0;l1--) printf("%d",bb[l1]);
                printf("\n");
            }
        }
    }
    return 0;
}

 

你可能感兴趣的:(基础代码程序,C/C++代码,算法实现)