思路:两个数相乘最多有length1+length2 位 第i位*第j位所得的数的个位数一定落在第i+j位 如果这个数超过了10 就往第i+j+1上进位
package testPackage;
public class Big {
public static int[] stringtoArray(String str){
int length=str.length();
int[] arr=new int[length];
for(int i=0;i<length;i++){
arr[length-i-1]=Integer.parseInt(str.substring(i, i+1));//反序输出,方便位数计算
}
return arr;
}
public static int[] cheng(int[] arr1,int[] arr2){
int length1=arr1.length;
int length2=arr2.length;
int[] sum=new int[length1+length2];
for(int i=0;i<length1;i++){
for(int j=0;j<length2;j++){
//模仿乘法运算过程
int t=sum[i+j]+arr1[i]*arr2[j];
sum[i+j]=t%10;
sum[i+j+1]=sum[i+j+1]+t/10;
}
}
return sum;
}
public static void main(String[] args) {
String str="72106547548473106236 982161082972751393";
//String str = "121 30";
String[] strr=str.split(" ");
int[] arr1=stringtoArray(strr[0]);
int[] arr2=stringtoArray(strr[1]);
/*测试String转换为整形数组 ,逆序输出
for(int i=0;i<arr1.length;i++){
System.out.println(arr1[i]);
}
*/
for(int i=0;i<=arr1.length-1;i++){
System.out.print(arr1[i]);
}
System.out.println();
for(int i=0;i<=arr2.length-1;i++){
System.out.print(arr2[i]);
}
System.out.println();
int[] sum=cheng(arr1,arr2);
int len = sum.length-1;
//两个数相乘有可能达不到length1+length2位 所以前面的数字就是0 找到第一个不是0的位置 然后开始输出
for(int i=sum.length-1;i>=0;i--){
if(sum[i]!=0) {
len = i;
break;
}
}
for(int i=len;i>=0;i--){
System.out.print(sum[i]);
}
}
}