大数相乘
来源:互联网 发布:彭城之战 知乎 编辑:程序博客网 时间: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]);}}}
阅读全文
0 0
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- 大数相乘
- The action could not be completed.Try again.
- live555接实时视频流+ffmpeg解+x264再编
- 关于jar包和工程src里面class相同的加载优先级问题
- MFC文件对话框不能选太多文件的解决方法
- 网站服务器、网站被攻击怎么办
- 大数相乘
- hdoj 6034(2017 Multi-University Training Contest
- CSU 1815:Enterprising Escape(BFS+优先队列)
- svn分支以及分支合并
- spring中InitializingBean接口使用理解
- js 强制保留2位小数
- 锁的优化和注意事项
- absolute元素在text-align属性下的对齐显示
- Bound Service 1