题目详情
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2.
Note:
-The length of both num1 and num2 is < 110.
-Both num1 and num2 contains only digits 0-9.
-Both num1 and num2 does not contain any leading zero.
-You must not use any built-in BigInteger library or convert the inputs to integer directly.题目要求输入两个以字符串形式表示的正整数,要求我们求出它们的乘积,同样也是字符串形式表示。要求不能直接将字符串转换为整数进行乘法运算。
想法
- 这道题的思路就是将我们平时手算多位数乘法的计算方法,转换成程序语言。
- 对于两个长度分别为m,n的字符串,乘法操作获得的字符串res长度为m+n(第一位可以是0)
- 首先我们看一下下面这张图
- 这个例子里我们的操作顺序是,用5分别乘以1,2,3;随后再用4分别乘以1,2,3.每次对位的乘法操作我们默认他会获得一个两位数(第一位可以是0)
- 如果进行乘法操作的两位在各自字符串中的位置为i和j,那么生成的两位数在结果字符串res中对应的位置应当是i+j和i+j+1
- 将乘法结果和对应位置上的已有数相加,再将结果放到对应位置。
解法
public String multiply(String num1, String num2) {
int m = num1.length();
int n = num2.length();
int[] pos = new int[m+n];
//计算
for(int i=m-1;i>=0;i--){
for(int j=n-1;j>=0;j--){
int mul = (num1.charAt(i)-'0')*(num2.charAt(j)-'0');
int p1 = i + j;
int p2 = i + j + 1;
int sum = mul + pos[p2];
pos[p1] += sum / 10;
pos[p2] = sum % 10;
}
}
StringBuilder sb = new StringBuilder();
for(int p : pos) if(!(sb.length() == 0 && p == 0)) sb.append(p);
return sb.length() == 0 ? "0" : sb.toString();
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。