解题思路:【原代码是我写的,现在这个代码是豆包改的,和我原本想法细节上有出入,我就不解释了,直接分享代码吧】
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复