
代码如下:
public class Mutiply {
public static void main(String[] args){
String str1 = "7832974972840919321747983209327";
String str2 = "1987432091904327543957";
System.out.println(multiply(str1,str2));
}
public static String multiply(String num1,String num2){
int len1 = num1.length();
int len2 = num2.length();
//结果最大长度len1+len2,最小为len1+len2-1
int[] num = new int[len1+len2]; //数组默认初始化均为0
for(int i=0;i<len2;i++){
int n1 = num2.charAt(len2-1-i)-'0';
int tmp = 0; //表示进位
for(int j=0;j<len1;j++){
int n2 = num1.charAt(len1-1-j)-'0';
tmp = tmp + num[i+j] + n1*n2;
num[i+j] = tmp%10;
tmp = tmp/10;
}
num[len1+i] = tmp; //下面的数与上面最高位相乘得到的那个进位
}
//现在数组中存的是从个位开始到高位,所以需要倒过来
//先找到数组中从后面开始不为0的数,该数为最高位。
int i = len1+len2-1;
while(i>=0 && num[i]==0){
i--;
}
String result = "";
while(i>=0){
result+=num[i--];
}
return result;
}
}




近期评论