兜兜零元 发表于 2025-3-10 20:41:00

字符串相乘——力扣

给定两个以字符串情势表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串情势。
注意:不能利用任何内置的 BigInteger 库或直接将输入转换为整数。

示例 1:
<strong>输入:</strong> num1 = "2", num2 = "3"
<strong>输出:</strong> "6" 示例 2:
<strong>输入:</strong> num1 = "123", num2 = "456"
<strong>输出:</strong> "56088"
  代码实现:
class Solution {
    public String multiply(String num1, String num2) {
      int len1=num1.length();
      int len2=num2.length();
      int[] arr=new int;
      //记录位置
      int flag=0;
      for(int i=len1-1;i>=0;i--){
            //初始位置
            flag=i+len2;
            for(int j=len2-1;j>=0;j--){
                int num=(num1.charAt(i)-'0')*(num2.charAt(j)-'0');
                int carry=num/10;
                int cur=num%10;
                arr+=cur;
                //如果当前位大于10了就进位
                if(arr>=10){
                  //确保当前位-1还是有效位
                  //然后进位
                  if(flag-1>=0){
                        arr+=arr/10;
                        arr=arr%10;
                  }
                }
                //进位
                if(flag-1>=0){
                  arr+=carry;
                }
                flag--;
            }
      }
      //转换结果为字符串
      StringBuffer res=new StringBuffer();
      for(int i=0;i<arr.length;i++){
            //把前边为零的消掉(比如2*3 arr数组存储的是0 6),同时避免了一些长数组相乘为零的情况
            //(比如0*9901 arr数组存储为0 0 0 0 0。)
            if(!(res.length()==0&&arr==0)){
                res.append(arr);
            }
      }
      //如果res.length==0说明结果为0
      return res.length()==0?"0":res.toString();
    }
}  
测试结果:
https://i-blog.csdnimg.cn/direct/6359a8b748fe492882fa2268424eb59a.png 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 字符串相乘——力扣