给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
例如:
输入: num1 = “2”, num2 = “3” 输出: “6”
输入: num1 = “1234”, num2 = "56"输出: “69104”
思路如下: 先确定个位数>再确定十位数>再确定百位数>…
可参考我的另外一篇文章:java实现两个大数相加
用1234+56举例列举步骤:
1.采用个位乘以个位,十位乘以十位,所以采用倒序遍历1234,56
2.第一轮就是4,3,2,1分别与6相乘,记1234×6结果为n1
3.再拿 (6×4) =24。发现进位了,24%10=4,确定结果n1个位一定是4
,此时储存进位的2
4.再拿 (6×3)+2=20。发现进位了,20%10=0,可以确定n1十位一定0
,此时储存进位的2
5.再拿 (6×2)+2=14。发现进位了,14%10=4,可以确定n1百位一定是4
,此时储存进位的1
6.再拿 (6×1)+1=7。发现没进位,7%10=7,可以确定n1千位一定是7
,此时储存进位的0
7.把每轮的结果拼起来,这个时候n1的值就为7404
8.开始第二轮4,3,2,1分别与5相乘,记录1234×5的结果为n2
9.步骤同3-7。此时n2的结果为6170
但是实际上应该是1234×50,所以结果为61700
10.这个时候就把每轮的结果加上来7404+61700=69104
步骤讲完了:那么算法如下
//两数相乘
public static String multiply(String num1, String num2) {
if (num1 == null || num2 == null || num1.equals("0") || num2.equals("0")) {
return "0";
}
num1 = (new StringBuffer(num1)).reverse().toString();
num2 = (new StringBuffer(num2)).