给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
解题思路:定义一个整形数组,长度为两个字符串长度之和。从后往前遍历两个字符串,并将元素相乘。将乘积结果放到对应的
数组位置。 num1的第i位(高位从0开始)和num2的第j位相乘的结果在乘积中的位置是如果乘积小于10,直接存入到[i+j+1]下标,如果乘积大于9,取模存入[i+j+1](需要注意是否产生进位),取商存入[i+j]。
代码实现:
public class test0508 {
public static void main(String[] args) {
Solution s = new Solution();
String num1 = "123";
String num2 = "456";
String ss = s.multiply(num1,num2);
System.out.println(ss);
}
}
class Solution {
public String multiply(String num1, String num2) {
if(num1.equals("0") || num2 .equals("0")){
return "0";
}
int[] arr = new int[num1.length()+num2.length()];
for(int i = num1.length()-1; i>-1; i--){
for(int j= num2.length()-1; j>-1; j--){
int a = (num1.charAt(i)-48) *(num2.charAt(j)-48);
if( a > 9){
arr[i+j+1] += a%10;
arr[i+j] += a/10;
}else{
arr[i+j+1] += a;
}
if(arr[i+j+1]>9){
arr[i+j] += arr[i+j+1] /10;
arr[i+j+1] = arr[i+j+1] %10;
}
}
}
String s = "";
for(int i :arr){
s += i;
}
if(s.charAt(0) == '0'){
String ss = s.substring(1);
return ss;
}
return s;
}
}
来源:CSDN
作者:be_gin_ner
链接:https://blog.csdn.net/be_gin_ner/article/details/89967768