题解 | 高精度整数加法

高精度整数加法

https://www.nowcoder.com/practice/49e772ab08994a96980f9618892e55b6

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    
    char str1[10000];
    char str2[10000];
    while (scanf("%s %s", str1, str2) != EOF) { 
        int len1 = strlen(str1);
        int len2 = strlen(str2);
        int num1[len1+1];  //给首位满十进一预留
        int num2[len2+1];  //给首位满十进一预留
        int num3[10001];   //用来存储相加后每一项的数组
        int num4[10001];   //用来将长度较短数组增加数组前面为0的个数,使得长度与较长数组一致,好计算num3数组
        int i,j;
        int a = 0;
        for(i=0;i<=len1;i++)
        {
            if(i == 0)
            num1[i] = 0;  //数组第一位赋值为0
            else
            num1[i] = str1[i-1] - '0';  //数组第二位至最后一位是str1数组中的每一项
        }
        for(i=0;i<=len2;i++)
        {
            if(i == 0)
            num2[i] = 0;
            else
            num2[i] = str2[i-1] - '0'; //数组第二位至最后一位是str2数组中的每一项
        }
        if(len1>=len2)
        {
           for(i=len1;i>=0;i--)
           {
                if(i>=len1-len2 && i<=len1) num4[i] = num2[i-len1+len2]; //num2复制给num4的从len1-len2到len1项
                if(i>=0 && i<len1-len2) num4[i] = 0; //num4从0到len1-len2-1项全部赋值0
                num3[i] = num1[i] + num4[i] + a;   //a 存在是为了满十进一
                if(num3[i] > 9 )
                {
                    num3[i] = num3[i] - 10;  //满十进一后的值
                    a = 1;
                }
                else a = 0;
           }
            for(i=0;i<1;i++)
            {
                if(num3[i] != 0)
                printf("%d",num3[i]);  //num3首位非零就全部输出
                else break;
            }
            for(i=1;i<=len1;i++)
            {
                printf("%d",num3[i]); //num3首位为零就将去掉首位,输出其他
            }
        }
        if(len1<len2)
        {
           for(i=len2;i>=0;i--)
           {
                if(i>=len2-len1 && i<=len2) num4[i] = num1[i-len2+len1]; //num1复制给num4的从len2-len1到len2项
                if(i>=0 && i<len2-len1) num4[i] = 0; //num4从0到len2-len1-1项全部赋值0
                num3[i] = num2[i] + num4[i] + a;
                if(num3[i] > 9 )
                {
                    num3[i] = num3[i] - 10;
                    a = 1;
                }
                else a = 0;
           }
            for(i=0;i<1;i++)
            {
                if(num3[i] != 0)
                printf("%d",num3[i]);
                else break;
            }
            for(i=1;i<=len2;i++)
            {
                printf("%d",num3[i]);
            }
        }
    }
    return 0;
}

全部评论

相关推荐

10-01 09:50
门头沟学院 Java
肖先生~:这个人真的很好,点赞
点赞 评论 收藏
分享
牛牛不会牛泪:脉脉太多这种了,纯水军
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务