总结
对于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 };