1.6编程基础之一维数组 10.大整数加法

描述

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

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

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

#include<stdio.h>
#include<string.h>
int main()
{
    int  i,j,str1,str2,k=0;     //k用来表示bool值,0假1真
    int  a1[255],a2[255],a3[255];
    char c1[255],c2[255];     //用字符方式存储两个大数的数值

    for(i=0; i<255; i++)
    {
        a1[i]=0;               //把int数组内所有数内置为0
        a2[i]=0;
    }

    scanf("%s",c1);
    scanf("%s",c2);           //用char类型c1,c2存储大数的值


    str1=strlen(c1);          //用str1表示读入第一个数的长度
    str2=strlen(c2);          //用str2表示读入第二个数的长度

    j=0;
    for(i=str1-1; i>=0; i--)  //用int类型的数组来来存放大数的位数
        a1[j++]=c1[i]-'0';

    j=0;
    for(i=str2-1; i>=0; i--)
        a2[j++]=c2[i]-'0';

    for(i=0; i<255; i++)       //大数位数相加如果大于10就向前一位数进1
    {
        a1[i]+=a2[i];
        if(a1[i]>=10)
        {
            a1[i]-=10;
            a1[i+1]++;
        }
    }
    //例如a1相加后的结果是1234
    j=0;                         //a1表示就是1234000...000
    for(i=254; i>=0; i--)        //a3变化后为000...0001234
        a3[j++]=a1[i];               //下边目的就是想办法把这些前置的0给消除

    for(i=0; i<255; i++)
    {
        if(a3[i]!=0)   k=1;           //当从第一位数一直到非0的数我们都不需要打印
        if(k==1)   printf("%d",a3[i]);//当第一位非0的数出现时候我们把剩下的数打印出来
    }

    if(k==0)  printf("0");        //当输入两个0的时候出现的特殊情况
    //不加这行程序不会帮你输出结果0
    printf("\n");
    return 0;

}

 

全部评论

相关推荐

10-15 15:00
潍坊学院 golang
跨考小白:这又不是官方
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务