题解 | #高精度整数加法#

高精度整数加法

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

//从后往前相加,长的一组继续补位(要注意加到最后一位时是否有进位)
#include <stdio.h>
#include<string.h>
int main()
{
    char arr1[10000], arr2[10000];
    gets(arr1);
    gets(arr2);
    int sz1 = strlen(arr1), sz2 = strlen(arr2), i = 1, j = 1, num = 0, max, min, p[10000] = { 0 };
    max = sz1 > sz2 ? sz1 : sz2;
    min = sz1 > sz2 ? sz2 : sz1;
    if (arr1[0] == '0')
    {
        printf("%s\n", arr2);
        return 0;
    }
    if (arr2[0] == '0')
    {
        printf("%s\n", arr1);
        return 0;
    }
    while (i <= min)
    {
        p[max - i + 1] = ((arr1[sz1 - i] + arr2[sz2 - i] - 96) % 10 + num) % 10;
        if (((arr1[sz1 - i] + arr2[sz2 - i] - 96) % 10 + num) == 10)
        {
            num = 1;
            i++;
            continue;
        }
        num = (arr1[sz1 - i] + arr2[sz2 - i] - 96) / 10;
        i++;
    }
    if (num&&sz1==sz2)
    {
        p[0] = 1;
        goto print;
    }
    while (i <= max)
    {
        if (sz1 > sz2)
        {
            p[max - i + 1] = (arr1[sz1 - i] - 48 + num) % 10;
            num = (arr1[sz1 - i] - 48 + num) / 10;
        }
        else if (sz2 > sz1)
        {
            p[max - i + 1] = (arr2[sz2 - i] - 48 + num) % 10;
            num = (arr2[sz2 - i] - 48 + num) / 10;
        }
        i++;
    }
print:
    if (p[0] == 1)
    {
        i = 0;
    }
    else
    {
        i = 1;
    }
    while (i <= max)
    {
        printf("%d", p[i]);
        i++;
    }
    return 0;
}

全部评论

相关推荐

07-07 12:47
门头沟学院 Java
码农索隆:竟然还真有卡体检报告的
点赞 评论 收藏
分享
06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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