写在前面
周五腾讯模拟笔试(2016.03.25),出了个题,关于大数相乘的问题。这样的题以前也有,网上也有很多实现代码(笔者写完算法后搜索了一下,确有很多,并未细看,并不知道是否有和笔者相同的解决方案)。笔者将算法用java实现,写出来给各位参考一下,不足之处,请各位多多指正。
问题
问题描述
输入两个整数,要求输出两个整数的乘积,该乘积可能超出整型范围。
问题分析
首先,依题意,肯定是不能用两个整数直接相乘,得到结果。故要考虑分解问题,即如何将两个大数的乘法,换成一系列小一点的数的运算。由此,笔者根据小学竖式,想到了不进位乘法,觉得可以用不进位乘法来解决大数相乘的问题。至此,算法已经确定,接下来就是如何处理两个整数和其乘积了。笔者自以为可以用ArrayList来存储。
算法描述
基本思想:采用不进位乘法计算,然后再将结果进行转换
如计算12345*123 (num1*num2)
1 2 3 4 5 list1 5 4 3 2 1
* 1 2 3 list2 3 2 1
————————————————
3 6 9 12 15
2 4 6 8 10