[leetcode]43. Multiply Strings

本文介绍了一种处理大整数相乘问题的算法,通过将字符串转换为数组,并使用逐位相乘再进位的方法,实现了超出常规整数类型限制的大数运算。文章提供了详细的代码实现。

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

一开始以为是分治递归的那种大整数相乘,还发现了一个牛逼算法,但是这个算法还是不能超过long,因为其中有一个longlong想加要处理,和题意不符合。

大整数相乘的牛逼方法
https://blog.youkuaiyun.com/u010983881/article/details/77503519


Solution1:根据两数相乘的原理,用一个int【】保存先都不进位的结果。然后res数组从右往左进位。一个很tricky的点是,res数组的第0位正好可以留给最高位进位。
class Solution {
    public String multiply(String num1, String num2) {
        if(num1==""||num2=="")return "0";
       
        char[] char1=num1.toCharArray();
        char[] char2=num2.toCharArray();
        
        int[] arr1 = new int[char1.length];
        int[] arr2 = new int[char2.length];
        for(int i = 0; i < char1.length; i++){
            arr1[i] = char1[i] - '0';
        }
        for(int i = 0; i < char2.length; i++){
            arr2[i] = char2[i] - '0';
        }
        
        int[] ans=add(arr1,arr2);
        String resStr="";
        
        //处理有数为0的情况
        int isAllZero=0;
        for(int i=0;i<ans.length;i++){
            if(ans[i]!=0)isAllZero=1;
            resStr+=String.valueOf(ans[i]);
        }
        
        if(isAllZero==1){
        //最高位如果没有进位,那么res【0】默认是0,就不要输出了。
            if(ans[0]==0)return resStr.substring(1);
            else return resStr;
        }
        
        else{
            return "0";
        }
        
        

    }
    public int[] add(int[] nums1,int[] nums2){
        
        int[] res=new int[nums1.length+nums2.length];
        
        for(int i=0;i<nums1.length;i++){
            for(int j=0;j<nums2.length;j++){
                res[i+j+1]+=nums1[i]*nums2[j];
            }
        }
        
        for(int k=res.length-1;k>0;k--){
            if(res[k]>=10){
                res[k-1]+=res[k]/10;
                res[k]%=10;
            }
        }
        
        return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值