大整数乘法,整数已经被划分成了int 数组
求 123456789*56789
面试题 已知如注释
import java.util.*;
/*a=[9,8,7,6,5,4,3,2,1]
* b=[9,8,7,6,5]*/
public class two {
public static void main(String[] args) {
int a[]={9,8,7,6,5,4,3,2,1};
int b[]={9,8,7,6,5};
int t[][]=new int[a.length][b.length];
for(int i=0;i<a.length;i++){
for(int j=0;j<b.length;j++){
t[i][j]=a[i]*b[j];
// System.out.print(t[i][j]+" ");
}
}
List<Integer>list=new ArrayList<>();
//矩阵每个对角线相加 其实就是错位,有更简单的char,
//但是我不太习惯所以选用矩阵对角线
for(int k=0;k<a.length+b.length-1;k++){
int tmp=0;//每一层的和
for(int l=0;l<a.length;l++){//
for(int m=0;m<b.length;m++){
if(k==l+m){//这里找出行列和层数的关系
tmp+=t[l][m];
}
}
}
list.add(tmp);
}
// System.out.println(list);
int size=list.size();
int arr[]=new int[size];
for(int o=0;o<size;o++){
arr[o]=list.get(o);
}
List<Integer>path=new ArrayList<>();
StringBuffer ans=new StringBuffer();
for(int g=0;g<list.size();g++){
if(g+1<list.size()){
arr[g+1]+=arr[g]/10;
arr[g]%=10;
}
ans.append(arr[g]);
}
String str[]=ans.reverse().toString().split("");
for(int d=str.length-1;d>=0;d--){
System.out.print(Integer.valueOf(str[d])+" ");
}
}
}