美文网首页
2018-12-01 字符串相乘

2018-12-01 字符串相乘

作者: 天际神游 | 来源:发表于2018-12-01 10:04 被阅读0次

    题目:

    字符串相乘

    解法:

    模拟手算乘法的过程, 首先, 我先把字符串计算结果从个位十位百位的从左往右排列, 计算完然后输出字符串的时候又从右往左遍历.

    public String multiply(String num1, String num2) {
        // num1乘以num2不会超过他们两个的长度
        int len1 = num1.length();
        int len2 = num2.length();
    
        // 个位, 十位, 百位...
        int[] result = new int[len1 + len2];
    
        for (int i = len1 - 1; i >= 0; i--) {
            for (int j = len2 - 1; j >= 0; j--) {
                int n1 = num1.charAt(i) - '0';
                int n2 = num2.charAt(j) - '0';
                // 需要倒转一下,保持 个位, 十位, 百位这样的顺序
                result[len1 + len2 - 2 - (i + j)] += n1 * n2;
            }
        }
    
        // 所得的结果需要进位, 从个位开始加
        int carry = 0;
        for (int i = 0; i < result.length; i++) {
            result[i] += carry;
            // 求进位
            carry = result[i] / 10;
            // 得数位上的数
            result[i] = result[i] % 10;
        }
    
        // 转化成字符串
        StringBuilder sb = new StringBuilder();
        boolean initFlag = true;
        for (int i = result.length - 1; i >= 0; i--) {
            // 从高位向低位append
            if ((initFlag == true) && (result[i] == 0)) {
                continue;
            }
            initFlag = false;
            sb.append(result[i]);
        }
        return sb.length() == 0 ? "0" : sb.toString();
    }
    

    相关文章

      网友评论

          本文标题:2018-12-01 字符串相乘

          本文链接:https://www.haomeiwen.com/subject/zudlcqtx.html