实现一个加法器,使其能够输出a+b的值。
输入包括两个数a和b,其中a和b的位数不超过1000位。
可能有多组测试数据,对于每组数据, 输出a+b的值。
输入:
2 6 10000000000000000000 10000000000000000000000000000000
复制输出:
8 10000000000010000000000000000000
#include
#include
// 函数用于将字符串表示的数字转换为整数数组,倒序存储
void str_to_int_array(char *str, int num[]) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
num[i] = str[len - 1 - i] - '0'; // 字符转换为数字
}
}
// 函数用于将整数数组转换为字符串表示的数字
void int_array_to_str(int num[], int len, char *str) {
int i;
for (i = len - 1; i >= 0; i--) {
str[len - 1 - i] = num[i] + '0'; // 数字转换为字符
}
str[len] = '\0'; // 添加字符串结束符
}
// 函数用于计算两个大整数的和
void add_large_numbers(char *a, char *b, char *result) {
int num1[1005] = {0}, num2[1005] = {0}, sum[1006] = {0};
int len1 = strlen(a), len2 = strlen(b);
str_to_int_array(a, num1);
str_to_int_array(b, num2);
int carry = 0, i;
int max_len = len1 > len2 ? len1 : len2;
for (i = 0; i < max_len; i++) {
int digit_sum = num1[i] + num2[i] + carry;
sum[i] = digit_sum % 10;
carry = digit_sum / 10;
}
if (carry > 0) {
sum[i] = carry;
max_len++;
}
int_array_to_str(sum, max_len, result);
}
int main() {
char a[1005], b[1005], result[1006];
while (scanf("%s %s", a, b) != EOF) {
add_large_numbers(a, b, result);
printf("%s\n", result);
}
return 0;
}
str_to_int_array
函数:
int_array_to_str
函数:
add_large_numbers
函数:
str_to_int_array
函数将两个字符串转换为整数数组表示。int_array_to_str
函数将结果转换为字符串表示,并保存到结果字符串中。main
函数:
add_large_numbers
函数计算它们的和,并将结果输出到标准输出中#include
#include
// 函数用于将两个字符串表示的大整数相加
void add_large_numbers(char *a, char *b, char *result) {
int len1 = strlen(a);
int len2 = strlen(b);
int carry = 0; // 进位标志
// 从低位到高位依次相加
for (int i = len1 - 1, j = len2 - 1, k = 0; i >= 0 || j >= 0 || carry > 0; i--, j--, k++) {
int sum = carry;
if (i >= 0) {
sum += a[i] - '0';
}
if (j >= 0) {
sum += b[j] - '0';
}
result[k] = sum % 10 + '0'; // 计算当前位的数字并转换为字符
carry = sum / 10; // 更新进位
}
// 翻转结果字符串
int len = strlen(result);
for (int i = 0; i < len / 2; i++) {
char temp = result[i];
result[i] = result[len - 1 - i];
result[len - 1 - i] = temp;
}
}
int main() {
char a[1001], b[1001], result[1002]; // result 长度应为最大长度 + 1,用于存储可能的进位
while (scanf("%s %s", a, b) != EOF) {
add_large_numbers(a, b, result);
printf("%s\n", result);
}
return 0;
}
头文件包含:
stdio.h
包含了输入输出函数 printf
和 scanf
。string.h
包含了字符串操作函数 strlen
。add_large_numbers 函数:
a
和 b
,以及保存结果的字符数组 result
。a
和 b
的长度,以便后续循环遍历。main 函数:
main
函数负责程序的主要逻辑。add_large_numbers
函数来计算它们的和,并将结果输出到标准输出中。