给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = "2", num2 = "3" 输出: "6"
示例 2:
输入: num1 = "123", num2 = "456" 输出: "56088"
代码实现:
class Solution {public String multiply(String num1, String num2) {int len1=num1.length();int len2=num2.length();int[] arr=new int[len1+len2];//记录位置int flag=0;for(int i=len1-1;i>=0;i--){//初始位置flag=i+len2;for(int j=len2-1;j>=0;j--){int num=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');int carry=num/10;int cur=num%10;arr[flag]+=cur;//如果当前位大于10了就进位if(arr[flag]>=10){//确保当前位-1还是有效位//然后进位if(flag-1>=0){arr[flag-1]+=arr[flag]/10;arr[flag]=arr[flag]%10;}}//进位if(flag-1>=0){arr[flag-1]+=carry;}flag--;}}//转换结果为字符串StringBuffer res=new StringBuffer();for(int i=0;i<arr.length;i++){//把前边为零的消掉(比如2*3 arr数组存储的是0 6),同时避免了一些长数组相乘为零的情况//(比如0*9901 arr数组存储为0 0 0 0 0。)if(!(res.length()==0&&arr[i]==0)){res.append(arr[i]);}}//如果res.length==0说明结果为0return res.length()==0?"0":res.toString();}
}
测试结果: