LeetCode刷题day043 (Jieky)

LeetCode第43题 Multiply Strings

/*
Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.

Note: You must not use any built-in BigInteger library or convert the inputs to integer directly.

Example 1:
Input: num1 = "2", num2 = "3"
Output: "6"

Example 2:
Input: num1 = "123", num2 = "456"
Output: "56088"

Constraints:
1 <= num1.length, num2.length <= 200
num1 and num2 consist of digits only.
Both num1 and num2 do not contain any leading zero, except the number 0 itself.
* */
public class MultiplyStrings {
     
    public static void main(String[] args) {
     
        String num1 = "123";
        String num2 = "456";
        MultiplyStrings ms = new MultiplyStrings();
        String result = ms.multiply(num1,num2);
        System.out.println(result);
    }

    // 使用笔算方法
    public String multiply(String num1, String num2) {
     
        // 输入检查
        if (num1.equals("0") || num2.equals("0")) return "0";

        // 最终得数
        String ans = "";

        for(int i=num1.length()-1;i>=0;i--){
     
            // 取出当前位
            int param1 = num1.charAt(i) - '0';
            // 声明进位
            int carray = 0;
            // 声明得数保存变量
            String ans_part = "";
            for(int j=num2.length()-1;j>=0;j--){
     
                int param2 = num2.charAt(j) - '0';
                // 得出加上前一个进位
                int temp = param1*param2 + carray;
                // 得出的余数放前面
                ans_part = temp%10 + "" + ans_part;
                // 保存进位
                carray = temp/10;
            }

            // 判断是否有进位未处理
            if(carray > 0) ans_part = carray +""+ans_part;

            // 根据num1当前的位数不同,补0
            for(int k=0;k< num1.length() -1 - i;k++){
     
                ans_part = ans_part + "0";
            }

            // 将当前得数和之前的数相乘,大数相加
            ans = sumString(ans,ans_part);
        }

        return ans;
    }

    private String sumString(String num1, String num2) {
     
        int num1Length = num1.length() - 1;
        int num2Length = num2.length() - 1;

        // 保存进位
        int carray = 0;
        // 保存得数
        String ans = "";

        // 只要有一个数还没有加完就继续进行
        while (num1Length >= 0 || num2Length >=0){
     
            int param1 = num1Length >= 0 ? num1.charAt(num1Length) - '0':0;
            int param2 = num2Length >= 0 ? num2.charAt(num2Length) - '0':0;
            int temp = param1+param2 + carray;
            ans = temp%10 + "" +ans;
            carray = temp/10;
            num1Length--;
            num2Length--;
         }

        //检查进位是否没有处理
        if (carray >0 ) ans = carray +""+ans;

        return ans;
    }
}

你可能感兴趣的:(LeetCode,leedcode,java)