大整数乘法:
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;
}
}