Sum—LeetCode-43 Multiply Strings

来源:互联网 发布:8kg.tv域名 编辑:程序博客网 时间:2024/05/25 23:28

题目描述:

Given two non-negative integers num1 andnum2 represented as strings, return the product ofnum1 and num2.

Note:

  1. The length of both num1 andnum2 is < 110.
  2. Both num1 andnum2 contains only digits0-9.
  3. Both num1 andnum2 does not contain any leading zero.
  4. You must not use any built-in BigInteger library orconvert the inputs to integer directly.
思想:基本的乘法思想,见代码:

public String multiply(String num1, String num2) {        char[] chars1 = num1.toCharArray();        char[] chars2 = num2.toCharArray();        char[][] data = new char[num2.length()][num1.length() + num2.length()];        for(int m = 0; m < num2.length(); ++m){            for(int n = 0; n < num1.length() + num2.length(); ++n){                data[m][n] = '0';            }        }        int back = 0;        for(int i = chars2.length - 1; i >= 0; --i){            int k = num1.length() + num2.length() - 1;            int b = Integer.valueOf(String.valueOf(num2.charAt(i)));            int c = 0;            for(int j = chars1.length - 1; j >= 0; --j){                int a = Integer.valueOf(String.valueOf(num1.charAt(j)));                int sum = a * b + c;                c = sum / 10;                data[i][k - back] = String.valueOf(sum % 10).charAt(0);                --k;            }            if(c != 0){                data[i][k - back] = String.valueOf(c).charAt(0);            }            ++back;        }        return addArray(data);    }    private String addArray(char[][] data) {        int c = 0;        int row = data.length, col = data[0].length;        int k = col;        char resChar[] = new char[col + 1];        for(int p = 0; p < col + 1; ++p) {            resChar[p] = '0';        }        for(int i = col - 1; i >= 0; --i) {            int sum = 0;            for(int j = 0; j < row; ++j) {                sum += Integer.valueOf(String.valueOf(data[j][i]));            }            sum += c;            resChar[k] = String.valueOf(sum % 10).charAt(0);            c = sum / 10;            --k;        }        int startIndex = 0, flag = 0;        for(int m = 0; m < resChar.length; ++m){            if(resChar[m] != '0'){                startIndex = m;                flag = 1;                break;            }        }        if(c != 0) {            resChar[startIndex - 1] = String.valueOf(c).charAt(0);            --startIndex;        }        if(flag == 0){            return "0";        }        return String.valueOf(resChar).substring(startIndex);    }


0 0
原创粉丝点击