43. 字符串相乘

43. 字符串相乘

复制代码
package 字符串;


public class 字符串相乘 {
    public static void main(String[] args) {
        String num1 = "123";
        String num2 = "456";
        字符串相乘 o = new 字符串相乘();
        System.out.println(o.addString(num1, num2));
        System.out.println(o.multiply(num1, num2));
    }


    // 利用乘法竖式的思想,先用num2的个位和num1相乘,先用num2的十位和num1相乘
    // 最后补零相加
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0")) {
            return "0";
        }
        String s = null;
        String result = null;
        for (int i = num2.length() - 1; i >= 0; i--) {
            int k = num2.charAt(i) - '0';
            StringBuilder sb = new StringBuilder();
            int carray = 0;
            // 补0
            for (int j = 0; j < num2.length() - 1 - i; j++) {
                sb.append(0);
            }
            for (int j = num1.length() - 1; j >= 0; j--) {
                int q = num1.charAt(j) - '0';
                int mul = k * q + carray;
                carray = mul / 10;
                mul = mul % 10;
                sb.append(mul);
            }
            if (carray != 0) {
                sb.append(carray);
            }
            s = sb.reverse().toString();
            result = addString(result, s);
        }
        return result;
    }

    // 两个字符串相加
    // "123"
    // "4567"
    public String addString(String result, String s) {
        if (result == null) {
            return s;
        }
        if (s == null) {
            return result;
        }
        StringBuilder sb = new StringBuilder();
        int i = result.length() - 1;
        int j = s.length() - 1;
        int carray = 0;
        while (i >= 0 || j >= 0 || carray != 0) {
            int m = i >= 0 ? result.charAt(i) - '0' : 0;
            int n = j >= 0 ? s.charAt(j) - '0' : 0;
            int sum = (m + n + carray) % 10;
            carray = (m + n + carray) / 10;
            sb.append(sum);
            i--;
            j--;
        }
        return sb.reverse().toString();
    }


}
复制代码

。。

posted @   guoyu1  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-12-02 ZAB协议-Zookeeper一致性协议
2019-12-02 Zookeeper数据类型、节点类型、角色、watcher监听机制
点击右上角即可分享
微信分享提示