A*B问题

这篇博客总结了解决A*B问题的关键点,包括进位处理、数组边界安全及位数不同的乘法运算。通过使用一维数组存储数字,从低位到高位进行计算,并考虑每次计算的进位问题,确保正确性。文章强调了防止未定义行为和理解进位与当前数的关系的重要性。
摘要由CSDN通过智能技术生成

总结

对于A*B的解题
让我收获还是很多
和A+B一样,能够考虑不同的东西

比如,
进位的问题
进位之后,进位的保留
进位与当前数的关系

还有数组一定要各种考虑不越界,不使用未定义行为。
保证数组一切未定义行为都不会发生
因此需要对一些隐含的事情,做出反应
比如下面那句while()->如果没有i>=0的条件保证,就会使得i小于0,使用了超界数组,导致严重出错。

还有一些考虑的事情
比如说那个是len_b先还是len_a先?
其实都一样,因为最终导致的都是len_b * len_a,不会降低时间复杂度的。
都是O(m*n)

基本思路

使用一维数组存储a和b
先用一个char数组存放等待输入的数据
然后将char数组倒置存放在a,b中,这样
a,b中存放的就是低位到高位是0,1,2,3,4,····,n这样的存放序列,便于运算
从低位到高位,进行计算
每一步计算,都要考虑上一步的进位问题
存放在当前位的数据,就是原本当前位相乘加上进位的余数
而下一个进位则是原本当前位数据的相乘和进位和的商
而且,由于是乘法,每一次的位数相乘,他们的位数是不一样的。
因此,有了temp[i+j],以存放不同位相乘的数
最后就是相加。
然后舍掉前导0
输出就好了

#include<stdio.h>
#include<string.h>

int a[505] = {
    0 };
int b[505] = {
    0 };
int c[1500] = {
    0 };
int temp[1500] = {
    0 };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值