高精度加法

#include <stdio.h>
#include <string.h>
#define MAX 200                                                   //大数最长位数
int main()
{
    char str1[MAX];
    char str2[MAX];
    char ans[MAX+MAX+1];                                                //用char型节省空间
    int len1,len2,bit,i,flag;
    memset(ans,0,sizeof(ans));
    printf("Please input a big number:");
    scanf("%s",str1);
    printf("Please input another big number:");
    scanf("%s",str2);
    len1=strlen(str1)-1;
    len2=strlen(str2)-1;
    bit=0;
    while(len1 >= 0 && len2 >= 0)                                //相同位数相加
        ans[bit++]=str1[len1--]-'0'+str2[len2--]-'0';
    while(len1 >= 0)                                            //str1多出的位放在结果里面
        ans[bit++]=str1[len1--]-'0';
    while(len2 >= 0)                                            //str2多出的位放在结果里面
        ans[bit++]=str2[len2--]-'0';
    //deal jinwei
    len1=strlen(str1);
    len2=strlen(str2);
    for(i=0;i<(len1>len2?len1:len2)+1;i++)                        //处理进位,结果最长不会超过最长的数字位数+1
        if(ans[i]>=10)
        {
            ans[i+1]+=ans[i]/10;
            ans[i]%=10;
        }
    //print
        printf("%s + %s = ",str1,str2);
    if(str1[0]=str2[0]==48)                                        //处理 0+0=0
    {
        printf("0 \n");
        return 0;
    }
    flag=0;
    for(bit=len1+len2-1;bit>=0;bit--)                            //倒找第一位,即第一个非 \0
    {
        if(ans[bit] != '\0') flag=1;
        if(flag) printf("%d",ans[bit]);
    }
    putchar('\n');
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值