加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

GOJ1002大数相加

发布时间:2020-12-14 02:39:50 所属栏目:大数据 来源:网络整理
导读:#includestdio.h#includestring.h//大数相加总的来说就是模拟手算,例如12345和352115,手算的过程就是从最小位开始逢十进一,因此大数都倒置,然后再来算较方便int main(){ int t,num=1,len1,len2,i,jin,j; char a[410],b[410],c[410],d[410],e[410]; scanf
#include<stdio.h>
#include<string.h>
//大数相加总的来说就是模拟手算,例如12345和352115,手算的过程就是从最小位开始逢十进一,因此大数都倒置,然后再来算较方便
int main()
{
    int t,num=1,len1,len2,i,jin,j;
    char a[410],b[410],c[410],d[410],e[410];
    scanf("%d",&t);
    getchar();
    while(t--)
    {
        memset(d,410*sizeof(char));//memset函数可将一个数组中的全部元素变为0或者-1,例如int a[10],memset(a,sizeof(a)或者memset(a,sizeof(int)*10);
        memset(e,410*sizeof(char));
        scanf("%s%s",a,b);
        getchar();
        len1=strlen(a);
        len2=strlen(b);
        for(i=len1-1,j=0;i>=0;i--,j++)
            d[j]=a[i]-48;              //倒置大数a[],结果存放在d[];
        for(i=len2-1,j++)
            e[j]=b[i]-48;              //倒置大数b[],结果存放在e[];
        jin=0;                         //jin表示有没有进位,0表示没有,1表示有
        for(i=0;i<len1||i<len2;i++)    //模拟手算的过程
        {
            c[i]=d[i]+e[i]+jin;
            jin=c[i]>9?1:0;            //jin表示有没有进位,0表示没有,1表示有
            c[i]=c[i]%10+48;           //取余

        }
        if(jin==1)c[i]=49;             //最后一位数看是否有没有进位,有进位的话最大位就是1;
        else i--;
        printf("Case %d:n",num++);
        printf("%s + %s = ",b);
        while(i>=0)                    //反向输出结果
        {
            printf("%c",c[i]);
            i--;
        }
        printf("n");
        if(t!=0)printf("n");

    }
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读