用数组完成乘法其实,比较难理解的是在其中一个数的个去乘以另一个数时候发生的偏移,还有最后相加的列数的长度。
```Java
import java.util.*;
public class Main {
public static void main(String[] args) {
int[][] number =new int[10000][10000];
Scanner sc = new Scanner(System.in);
String x=sc.nextLine();
String y=sc.nextLine();
char[] a=x.toCharArray();
char[] b=y.toCharArray();
int lena=x.length();
int lenb=y.length();
int i;
if(a[0]=='0'||b[0]=='0') {//如果a,b中有一个为0,程序终止
System.out.print(0);
System.exit(0);
}
int m=0;
int j;
//用y的一位分别乘以x的所有位数。模拟手算。
for(i=lenb-1;i>=0;i--) {
int k=lenb-i-1;//k发生偏移
int add=0;
for(j=lena-1;j>=0;j--) {
int s = (a[j] - '0') * (b[i] - '0') + add;
if (s < 10) {
number[m][k++] = s;
add = 0;
} else {
number[m][k++] = s % 10;
add = s / 10;
}
}
number[m][k++]=add;
m++;
}
int []arr=new int[20000];
int k=0;
int add=0;
for(j=0;j<=lenb+lena;j++) {
int sum=0;
for(i=0;i<lenb;i++) {
if(number[i][j]!='0') {
sum += number[i][j];//每个列相加
}
}
sum+=add;
if(sum>=10) {//进位操作
arr[k++]=sum%10;
add=sum/10;
}
else {
arr[k++]=sum;
add=0;
}
}
if(add!=0) {
arr[k++] = add;
}
if(arr[k]==0){//去前置零
while(arr[k]==0)
k--;
}
for(i=k;i>=0;i--){
System.out.print(arr[i]);
}
}
}