leetcode-字符串相乘

在这里插入图片描述

思路: 先将字符串模拟相乘,再将字符串相加

注意:
● 取余和做商都要将进位数带上,结束运算后进位数不为0还需添加上
● 做加法时,对于位数不同的情况,无需管越界的下标,只需将被加数置为0即可
● 对于每个由相乘得到的数,需进行补0处理

class Solution {
    public String multiply(String num1, String num2) {
        if(num1.equals("0")||num2.equals("0")) return "0";
         List<String> list=new LinkedList<String>();
         for(int i=num2.length()-1;i>=0;i--){
             // 逐位相乘
             int t1=num2.charAt(i)-48,temp=0,pow=0;
             StringBuffer str=new StringBuffer();
             for(int j=num1.length()-1;j>=0;j--){
                 int t2=num1.charAt(j)-48;
                 temp=((t1*t2)+pow)%10;
                 pow=((t1*t2)+pow)/10;
                 str.append(temp+"");
             }
            if(pow>0) str.append(pow+"");
            String str2=str.reverse().toString();//相乘后的字符串
            list.add(str2);
         }
         // 将全部list中的字符串相加
         String ans=list.get(0);
         for(int i=1;i<list.size();i++){
             int t=i;
             String temp1=list.get(i);
             while(t>0) {
                 temp1+="0";
                 t--;
             } 
             int j=temp1.length()-1,k=ans.length()-1,temp=0,pow=0;
             StringBuffer str=new StringBuffer();
             while(j>=0||k>=0){
                 int t1=j<0 ? 0:temp1.charAt(j)-48;
                 int t2=k<0 ? 0:ans.charAt(k)-48;
                 temp=(t1+t2+pow)%10;
                 pow=(t1+t2+pow)/10;
                 str.append(temp);
                 j--;
                 k--;
             }
            ans=str.reverse().toString();//相加后的字符串
         }
         return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值