利用动态数组求两个超长整数的和(C语言)

1、题目:

由键盘输入两个超长整数,求两个整数的和,要求有数组的扩容与缩容

2、思路

须知:

(1)、两个数相加是从后往前相加的,大于十要进一,代码中需要体现出这一点

(2)、实现数组的扩容或缩容需要使用到指针,通过改变指针的指向可以实现数组的扩容与缩容

先定义三个指针,分别指向申请分配的三个连续的空间,在读取键盘数据的过程中判断空间是否已满,若空间不足或过多,则使用realloc()进行空间的扩容与缩容。

后把两个数组中的数一一相加并存到第三个数组即可。

3、读取并分配空间

先定义好需要的变量:char* a,*b,*c;三个指针。int size1,size2;两个存储数组大小的整数。

(1)、分配空间

使用malloc()函数进行连续空间的分配,返回值是一个指针,因为void malloc()本身是一个无类型指针,所以赋值时需要强制类型转换。

*a = (char*)malloc(LEN * sizeof(char));

char**a 表示指针的地址,通过改变*a才可以把改变后的数组返回到主函数中。

(2)、扩容与缩容

扩容或者缩容可以用realloc()函数实现,realloc(地址,LN*sizeof(char/int));如果LN比原来的数小,即为缩容,反之即为扩容。

 *a = (char*)realloc(*a, size * sizeof(char));

4、两个数相加

i 为数组 a 中整数的个数

k 为数组 b 中的整数的个数

max 表示 i k 较大的数

如果最后相加的两位数大于10,则需要改变数组的容量(也可以一开始就分配多一点空间),然后把数组内的数往后移一位,最后把首元素赋值为1 即可

if (pre == 1) {
        int j = size;
        (*c) = (char*)realloc(*c, (size + 1) * sizeof(char));
        while (j > 0) {
            (*c)[j] = (*c)[j - 1];
            j--;
        }
        (*c)[0] = '1';
    }

最后返回两数之和,输出即可。

减法的话需要先判断两个数的大小,可以采用判断两个数位数的多少、逐个数判断等方法,最后大减小即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值