解题思路:【原代码是我写的,现在这个代码是豆包改的,和我原本想法细节上有出入,我就不解释了,直接分享代码吧】

注意事项:

参考代码:

#include <stdio.h>

#include <string.h>

 

// 去除字符串中的前导零

void removeLeadingZeros(char str[]) {

    int len = strlen(str);

    int i = 0;

    while (str[i] == '0' && i < len - 1) {

        i++;

    }

    // 将非零部分移到字符串开头

    int j = 0;

    while (i < len) {

        str[j++] = str[i++];

    }

    str[j] = '\0';

}

 

// 计算两个大整数的和

void addLargeNumbers(char num1[], char num2[]) {

    int result[205] = {0};

    int len1 = strlen(num1);

    int len2 = strlen(num2);

    int carry = 0;

    int i = len1 - 1, j = len2 - 1, k = 204;

 

    // 从右到左逐位相加

    while (i >= 0 || j >= 0 || carry) {

        int digit1 = (i >= 0) ? num1[i--] - '0' : 0;

        int digit2 = (j >= 0) ? num2[j--] - '0' : 0;

        int sum = digit1 + digit2 + carry;

        result[k--] = sum % 10;

        carry = sum / 10;

    }

 

    // 找到结果的第一个非零位置

    int start = 0;

    while (start < 205 && result[start] == 0) {

        start++;

    }

 

    // 输出结果

    if (start == 205) {

        printf("0\n");

    } else {

        for (int i = start; i < 205; i++) {

            printf("%d", result[i]);

        }

        printf("\n");

    }

}

 

int main() {

    char num1[206] = {0};

    char num2[206] = {0};

    scanf("%s %s", num1, num2);

 

    // 去除前导零

    removeLeadingZeros(num1);

    removeLeadingZeros(num2);

 

    // 计算并输出结果

    addLargeNumbers(num1, num2);

 

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论