题目背景
题目链接:P1303 A*B Problem - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意很简单:如何解决常见的数据类型无法完成的大数相乘问题,大家可以打开上方链接查看题目
其实大数的加法、减法、乘法思路都极度类似,只在关键几行代码上略有不同。在我的另一篇文章里记录了大数加法的过程,感兴趣的uu可以去瞟一眼(因为瞟一眼就可以掌握啦,前提是本篇的乘法你已经死死拿捏)。Unfortunately,大数除法则相对比较难理解,等在洛谷AC除法后,俺还会再来记录的。
思路
- 使用字符串接收输入的两个大数s1,s2
- 将s1,s2的每一位存为数组里的每一个元素,注意:在下面的代码中,将大数倒序存在了数组里,例:s1为“321”,存到数组里为a[0]=1,a[1]=2,a[2]=3。(正序也可以,这里采取倒序只是为了循环时 i 从0开始,看着比较舒服)
- 利用两层循环将数组里的对应位做乘法运算,并将结果存到结果数组 c 里,公式为c[i+j] += (a[i] * b[j]) 。如果c[i+j]>=10,我们需要进位,即c[i+j+1] += c[i+j]/10, c[i+j] %= 10; 题目的关键就在于公式 “c[i+j] += (a[i] *