给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"

输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"

输出: "56088"

说明:

num1 和 num2 的长度小于110。

num1 和 num2 只包含数字 0-9。

num1 和 num2 均不以零开头,除非是数字 0 本身。

不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

通过次数154,096提交次数343,823



class Solution {
public String multiply(String num1, String num2) {
int total[] = new int[num1.length() + num2.length()];
boolean flag = true;
int k = total.length - 1;
for (int i = num2.length() - 1; i >= 0; i--) {//首先处理两个数相乘,不处理进位
for (int j = num1.length() - 1; j >= 0; j--) {
total[i + j] += (num1.charAt(j) - '0') * (num2.charAt(i) - '0');
if (flag == true) {
k = i + j;//使用k标记有效的最高位否则数字结尾会出现多余的0,例如nums1='2',nums2='3'结果为60
flag = false;
}
}
}
for (int i = k; i > 0; i--) {//处理进位
total[i - 1] += total[i] / 10;
total[i] %= 10;
}
String str = "";
int member = 0;
for (int i = 0; i <= k; i++) {//使用member标记0的个数保证结果为0时只输出一个0
if(total[i]==0)
member++;
str += total[i];
}
if(member == k+1)
return "0";
else
return str;

}
}