leetcode:Multiply Strings

大整数乘法:

Strmul是计算被乘数与乘数的某一位的乘积

Stradd是大整数加法。

public class Solution {

    public static String multiply(String num1, String num2) {
       String rst="0";
       String adder2="0";
       int len1=num1.length();
       int len2=num2.length();
       int i;
       for(i=0;i<len2;i++)
       {
        adder2=Strmul(num1,(int)(num2.charAt(i)-'0'));
        if(rst.charAt(0)!='0')
        rst+="0";
        rst=Stradd(rst,adder2);
       }
       return rst;
}
 
public static String Strmul(String num1, int x)
{
String mulrst="0";
int n=num1.length();
int tmp=0;
for(int i=0;i<n;i++)
{
tmp=(int)(num1.charAt(i)-'0')*x;
if(mulrst.charAt(0)!='0')
mulrst+="0";
mulrst=Stradd(mulrst,Integer.toString(tmp));
}
return mulrst;
}
 
public static String Stradd(String adder1, String adder2)
{
String addrst;
int i,j,c=0,tmp;
int l1=adder1.length();
int l2=adder2.length();
//ganrantee l1>l2
if(l1<l2)
{
addrst=adder1;c=l1;
adder1=adder2;l1=l2;
adder2=addrst;l2=c;
}
char[] rst_c=new char[l1];
i=l1-1;j=l2-1;c=0;
while(i>=0&&j>=0)
{
//System.out.print(i+" "+j+" *** ");
tmp=(int)(adder1.charAt(i)-'0')+(int)(adder2.charAt(j)-'0')+c;
rst_c[i]=(char)(tmp%10+'0');
c=tmp<10?0:1;
i--;
j--;

}
while(i>=0)
{
tmp=(int)(adder1.charAt(i)-'0')+c;
rst_c[i]=(char)(tmp%10+'0');
c=tmp<10?0:1;
i--;
}
addrst=String.valueOf(rst_c);
//System.out.print(rst_c[0]+" "+rst_c[1]+rst_c[2]+rst_c[3]+" *** ");
if(c==1)
addrst="1"+addrst;
return addrst;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值