题目
给你两个数,求这两个数的积。注意:这两个数的长度length<=1000。
思路
暂时想不出什么好的方法,只能是暴力一遍,模拟一下整个乘法的过程!两个数的乘积的位数最多就是这两个数的位数的乘积再加1。还有一个就是注意排除全零的情况!
代码
/*
* 实现大数乘法
* */
public class Solution {
public String Mul(String num1,String num2)
{
int length1=num1.length();
int length2=num2.length();
// 排除空字符串
if (length1==0||length2==0)
return "数值不能为空";
// 排除数值为0
if (isZero(num1)||isZero(num2))
return "0";
// 两数相乘,结果位数不超过两个数字之和
int result[]=new int[length1*length2+1];
num1=new StringBuilder(num1).reverse().toString();
num2=new StringBuilder(num2).reverse().toString();
for (int i = 0; i < length1; ++i)
{
for (int j = 0; j < length2; ++j)
{
result[i+j]+=(num1.charAt(i)-48)*(num2.charAt(j)-48);
if (result[i+j]>=10)
{
result[i+j+1]+=result[i+j]/10;
result[i+j]=result[i+j]%10;
}
}
}
StringBuilder ans=new StringBuilder();
for (int i : result)
{
ans.append(i);
}
// 翻转结果
ans=ans.reverse();
// 去除前导零
int index=0;
while (ans.charAt(index)=='0')
++index;
String answer=ans.toString();
answer=answer.substring(index,answer.length());
return answer;
}
public boolean isZero(String n)
{
int count=0;
int length=n.length();
for (int i = 0; i < length; ++i)
{
if (n.charAt(i)!='0')
++count;
if (count!=0)
break;
}
return count==0;
}
}
结果
自己排除了一些bug,只要输入的数值是两个正整数,就可以得出正确结果,其他的细节等待完善!