大数相乘

来源:互联网 发布:彭城之战 知乎 编辑:程序博客网 时间:2024/06/15 13:18


思路:两个数相乘最多有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]);}}}

原创粉丝点击