大整数加法

总时间限制:
1000ms
内存限制:
65536kB
描述

求两个不超过200位的非负整数的和。

输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555

       大整数的处理的基本方式是差不多的,以用字符串的方式进行输入,然后再把字符串存入到整型数组里面进行处理。下面附上两个ac代码,第一个是没有进过优化的代码,第二个代码是经过他人讲解优化后的代码,就个人来说还是非常喜欢第二种代码。

版本一:

#include<stdio.h>
#include<string.h>
int main()
{
    char s1[210],s2[210];
    int a[210]={0},b[210]={0},i,j=0,k,t=0,l1,l2;
      gets(s1);
      gets(s2);
      l1=strlen(s1);
      l2=strlen(s2);
      for(i=l1-1;i>=0;i--)
        a[j++]=s1[i]-'0';
      for(j=0,i=l2-1;i>=0;i--)
        b[j++]=s2[i]-'0';
        if(l1>l2)
            k=l1;
        else
            k=l2;
        for(i=0;i<=k;i++)
        {
            a[i]+=b[i];
            if(a[i]>9)
            {
                t=a[i];
                a[i]%=10;
                a[i+1]+=t/10;
            }
        }
        for(i=k;i>=0&&a[i]==0;i--);
            if(i>=0)
            {
                for(;i>=0;i--)
                printf("%d",a[i]);
            }
            else
                printf("0");
            return 0;

}

版本二:

#include<cstdio>
#include<cstring>
char a[202],b[202];
int c[202],d[202];
int main()
{
    int l1,l2,i,k,t;
    scanf("%s%s",a,b);
    l1=strlen(a),l2=strlen(b);
    for(i=0;i<l1;i++)  c[l1-i-1]=a[i]-'0';
    for(i=0;i<l2;i++)  d[l2-i-1]=b[i]-'0';
   l1>l2?k=l1:k=l2;
   for(i=0;i<=k;i++)
     t=c[i]+d[i],c[i]=t%10,c[i+1]+=t/10;
   while(!c[k]&&k)k--;
   for(;k>=0;k--)
    printf("%d",c[k]);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值