LeetCode 43字符串相乘

本文详细解析了如何实现两个以字符串形式表示的非负整数的乘法运算,通过模拟多位数字相乘过程,利用数组存储中间结果并处理进位,最终输出字符串形式的乘积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

思路

就是模拟两个多位数字相乘的过程,使用一个数组来存放每次相乘的结果,用一个变量用来存储进位即可,最后将数组转换为字符串输出即可。

代码

public class Multiply_Strings {
    /**
     * @return java.lang.String
     * @author chy
     * @creed: Talk is cheap,show me the code
     * @date 16/4/2019 6:37 PM
     * @desc: 43.字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
     */
    public String multiply(String num1, String num2) {
        if (num1.equals("0") || num2.equals("0"))
            return "0";
        int[] temp = new int[num1.length() + num2.length()];
        int t = 0, i = 0, j = 0;
        for (i = num1.length() - 1; i >= 0; i--) {
            t = 0;
            for (j = num2.length() - 1; j >= 0; j--) {
                int a = (num1.charAt(i) - '0') * (num2.charAt(j) - '0') + temp[i + j + 1] + t;
                if (a < 10) {
                    temp[i + j + 1] = a;
                    t = 0;
                } else {
                    temp[i + j + 1] = a % 10;
                    t = a / 10;
                }
            }
            if (t != 0)
                temp[i + j + 1] = t;
        }
        StringBuffer re = new StringBuffer();
        int index = 0;
        while (temp[index++] == 0) ;
        for (int h = index - 1; h < temp.length; h++) {
//            re += (temp[h] + "");
            re.append(temp[h]);
        }

        return re.toString();
    }

    public static void main(String[] argc) {
        System.out.print(new Multiply_Strings().multiply("0", "3"));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值