对于非负整数 X而言,x的数组形式是每位数字按从左到右的顺序形成 的数组。例如,如果 X=1231,那么其数组形式为[1,2,3,1]。 给定非负整数 X的数组形式 A,返回整数 X 的数组形式,
#include <stdio.h>
#include <stdlib.h>
// 函数用于将两个数组形式的整数相加
int* addToArrayForm(int* num1, int num1Size, int* num2, int num2Size, int* returnSize) {
// 初始化结果数组的长度为两个输入数组长度之和
*returnSize = (num1Size > num2Size) ? num1Size + 1 : num2Size + 1;
int* result = (int*)malloc(*returnSize * sizeof(int));
// 初始化进位为0
int carry = 0;
// 从数组末尾开始逐位相加
for (int i = 0; i < *returnSize; ++i) {
int sum = carry;
// 如果num1还有数字,则加上
if (i < num1Size) {
sum += num1[num1Size - 1 - i];
}
// 如果num2还有数字,则加上
if (i < num2Size) {
sum += num2[num2Size - 1 - i];
}
// 计算当前位的值和进位
result[*returnSize - 1 - i] = sum % 10;
carry = sum / 10;
}
// 如果最高位有进位,则需要扩展结果数组
if (carry > 0) {
*returnSize += 1;
int* temp = (int*)realloc(result, *returnSize * sizeof(int));
if (temp == NULL) {
free(result);
return NULL;
}
result = temp;
result[*returnSize - 1] = carry;
}
return result;
}
int main() {
// 示例输入
int num1[] = {1, 2, 3};
int num2[] = {4, 5, 6};
int num1Size = sizeof(num1) / sizeof(num1[0]);
int num2Size = sizeof(num2) / sizeof(num2[0]);
int returnSize;
// 调用函数进行相加
int* result = addToArrayForm(num1, num1Size, num2, num2Size, &returnSize);
// 输出结果
printf("Sum: ");
for (int i = 0; i < returnSize; i++) {
printf("%d", result[i]);
}
printf("\n");
// 释放内存
free(result);
return 0;
}
这段代码定义了一个addToArrayForm
函数,它接受两个整数数组num1
和num2
以及它们的大小num1Size
和num2Size
,并返回一个新的数组,该数组表示这两个整数的和。returnSize
是一个指向整数的指针,用于返回结果数组的大小。 在main
函数中,我们提供了两个示例数组num1
和num2
,并调用addToArrayForm
函数来计算它们的和。然后,我们遍历结果数组并打印出每一位数字。最后,我们释放了为结果数组分配的内存。 请注意,这段代码假设输入的数组num1
和num2
都是有效的非负整数数组,并且没有前导零。如果输入可能包含无效情况,那么在实际应用中应该添加相应的错误检查和处理逻辑。