给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理
Related Topics
  • 数学
  • 字符串
  • 模拟
  • \n
  • 👍 670
  • 👎 0
  • 题解

    按照基本的乘法计算规则,分别计算每一位即可

    
    
    import java.util.Arrays;
    
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public String multiply(String num1, String num2) {
            if ("0".equals(num1)||"0".equals(num2)){
                return "0";
            }
            if ("1".equals(num1)){
                return num2;
            }
            if ("1".equals(num2)){
                return num1;
            }
            int[] res = new int[num1.length() + num2.length()];
            Arrays.fill(res,0);
            for (int k1 = num1.length()-1; k1 >= 0 ; k1--) {
                int n1 = num1.charAt(k1) - '0';
                for (int k2 = num2.length()-1; k2 >=0 ; k2--) {
                    int n2 = num2.charAt(k2) - '0';
                    //开始往res上堆结果
                    int k = k1 + k2 + 1;
                    int tmp = res[k] + (n2 * n1);
                    if (tmp >= 10){
                        res[k] = tmp % 10;
                        res[k-1] = res[k-1] + tmp/10;
                    }else{
                        res[k] = tmp;
                    }
                }
            }
            StringBuffer stringBuffer = new StringBuffer();
            for (int i = 0; i < res.length; i++) {
                if (i==0 && res[i] == 0){
                    continue;
                }
                stringBuffer.append(res[i]);
            }
            return stringBuffer.toString();
    
    
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
    

    补个小知识点Char转int

            System.out.println((int)("123".toCharArray()[0]));  //49
            System.out.println(("123".toCharArray()[0]-'0'));  //1
            System.out.println(("123".toCharArray()[0]+'0'));  //97
            System.out.println(('1'+'0'));  //97
            System.out.println((Character.getNumericValue("123".toCharArray()[0])));//1