高精度正整数加法

问题描述:
在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,

参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊

的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:

 

9876543210 + 1234567890 = ?

让字符串 num1="9876543210",字符串 num2="1234567890",结果保存在字符串 result = "11111111100"。

 

-9876543210 + (-1234567890) = ?

让字符串 num1="-9876543210",字符串 num2="-1234567890",结果保存在字符串 result = "-11111111100"。

 

要求编程实现上述高精度的十进制加法。

 

代码:

int main()
{
    while(1){
    int addtional=0;
    char num1[100],num2[100];
    int out[101];
    scanf("%s %s",num1,num2);
    int i,j;
    int start1=0,start2=0;
    int k=0;
    i=strlen(num1)-1;
    j=strlen(num2)-1;
        int maxlen;
        maxlen=i>j?i:j;
    while(i>=start1&&j>=start2){
        if(((num1[i]-'0')+(num2[j]-'0')+addtional)>9){
            out[k++]=((num1[i]-'0')+(num2[j]-'0')+addtional)%10;
            addtional=1;
        }else{
            out[k++]=(num1[i]-'0')+(num2[j]-'0')+addtional;
            addtional=0;
        }
          --i;
          --j;

    }
    if(i>=start1){
        if(addtional)out[k++]=(num1[i--]-'0')+addtional;
        while(i>=start1){out[k++]=(num1[i--]-'0');}
    }
    else if(j>=start2){
        if(addtional)out[k++]=(num2[j--]-'0')+addtional;
        while(j>=start2){
            out[k++]=(num2[j--]-'0');
        }

    }else{
      if(addtional)out[k++]=1;
      maxlen++;

    }

    for(int i=maxlen;i>=0;i--){
        printf("%d",out[i]);
    }
    printf("/n");
    fflush(stdin);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值