基本思路:
大数用字符串表示,开辟一个数组,数组长度为两个字符串长度之和。后面的就很简单了。
思路一:(利用数组)
public String multiply(String num1, String num2)
{
int len1 = num1.length();
int len2 = num2.length();
int[] num = new int[len1+len2];
for(int i = 0; i < len1; ++i)
{
int n1 = num1.charAt(len1-1-i) - '0';
int carry = 0; //进位
for (int j = 0; j < len2; ++j)
{
int n2 = num2.charAt(len2-1-j) - '0';
carry = n1*n2 + carry + num[i+j];
num[i+j] = carry % 10;
carry /= 10;
}
num[i+len2] = carry;
}
int i = len1 + len2 - 1;
while (i > 0 && num[i] == 0) --i;
String result = "";
while(i >= 0)
result += (char)(num[i--] + '0');
return result;
}
思路二(不利用数组)
public String multiply(String num1, String num2)
{
String rs = "";
int flag = 0;//进位
int tmp = 0;
String tmpStr = "";
int count = 0;
for(int i = num2.length()-1;i>=0;i--)
{
flag = 0;
tmpStr="";
int num = num2.charAt(i)-'0';
for(int j = num1.length()-1;j>=0;j--)
{
tmp = num*(num1.charAt(j)-'0')+flag;
flag = tmp/10;
tmp%=10;
tmpStr+=tmp;
}
if(flag>0)
tmpStr+=flag;
for(int m = 0;m<count;m++)
tmpStr = "0"+tmpStr;
rs = addStr(rs, tmpStr);
count++;
}
tmpStr = "";
for(int i=rs.length()-1;i>=0;i--)
tmpStr+=rs.charAt(i);
return tmpStr;
}
//加法
public String addStr(String m,String n)
{
if(m.equals(""))
return n;
if(n.equals(""))
return m;
int flag = 0;//进位
String str = "";
int i=0,j=0;
for(i = 0,j=0;i<m.length()&&j<n.length();i++,j++)
{
int oneNum = m.charAt(i)-'0';
int twoNum = n.charAt(j)-'0';
int result = oneNum+twoNum+flag;
flag = result/10;
result%=10;
str+=result;
}
if(i<m.length())
{
for(;i<m.length();i++)
{
int result = m.charAt(i)-'0'+flag;
flag = result/10;
result%=10;
str+=result;
}
}
if(j<n.length())
{
for(;j<n.length();j++)
{
int result = n.charAt(j)-'0'+flag;
flag = result/10;
result%=10;
str+=result;
}
}
if(flag>0)
str+=flag;
return str;
}