字符串相乘
题目:
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
思路:模拟出数字相乘就完事了。
1 2 3
x 4 5 6
nums = 18 12 6
nums = 18 12+15 6+10 5
nums = 18 27 16+12 5+8 4
nums = 18 27 28 13 4
nums = 8 8 0 6 5
实际上一边乘一边可以进行进位操作,最后逆序转换成字符串就ok了。注意去除前置0.
代码:
class Solution {
public String multiply(String num1, String num2) {
if(num1.equals("0")) return "0";
if(num2.equals("0") ) return "0";
int []nums = new int [300];
char []n1 = num1.toCharArray();
char []n2 = num2.toCharArray();
/*
1 2 3
4 5 6
nums = 18 12 6
nums = 18 12+15 6+10 5
nums = 18 27 16+12 5+8 4
nums = 18 27 28 13 4
nums = 8 8 0 6 5
*/
int op=0;
for(int i=n1.length-1;i>=0;i--){
op=n1.length-i-1;
for(int j=n2.length-1;j>=0;j--){
//乘起来
nums[op++] += (n1[i] - '0') * (n2[j] - '0');
}
//进位操作,op是当前最长长度
for(int z=0;z<op;z++){
if(nums[z] >=10 ) {
nums[z+1] +=nums[z]/10;
nums[z] %=10;
}
}
}
int flag=0;
String resultString = "";
for(int i=op;i>=0;i--){
//去前置0
if(nums[i] ==0 &&flag==0){
continue;
}
else flag=1;
resultString += nums[i] ;
}
return resultString;
}
}