989.数组形式的整数加法

对于非负整数 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函数,它接受两个整数数组num1num2以及它们的大小num1Sizenum2Size,并返回一个新的数组,该数组表示这两个整数的和。returnSize是一个指向整数的指针,用于返回结果数组的大小。 在main函数中,我们提供了两个示例数组num1num2,并调用addToArrayForm函数来计算它们的和。然后,我们遍历结果数组并打印出每一位数字。最后,我们释放了为结果数组分配的内存。 请注意,这段代码假设输入的数组num1num2都是有效的非负整数数组,并且没有前导零。如果输入可能包含无效情况,那么在实际应用中应该添加相应的错误检查和处理逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值