给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。

大数乘法,主要要处理好进位问题

public String multiply(String num1, String num2) {
    if(num1.equals("0") || num2.equals("0")) return "0";
    StringBuilder builder=new StringBuilder("0");
    char[] a1=new StringBuilder(num1).reverse().toString().toCharArray();
    char[] a2=new StringBuilder(num2).reverse().toString().toCharArray();
    for(int i=0;i<a1.length;i++){
        int cur=0;  
        int index=0;
        int n1=a1[i]-'0';
        while(cur>0 || index<a2.length || (index+i<builder.length() && cur!=0)){
            int n2=0;
            int n3=0;
            if(index<a2.length) n2=a2[index]-'0';
            if(index+i<builder.length()) n3=builder.charAt(index+i)-'0';
            int ret=n1*n2+cur+n3;
            int t=ret%10;
            if(index+i<builder.length()) builder.setCharAt(index+i,(char)(t+'0'));
            else builder.append((char)(t+'0'));
            cur=ret/10;
            index++;
        }
    }
    return builder.reverse().toString();
}

程浩
21 声望2 粉丝

« 上一篇
42. 接雨水