关于大数相乘问题(Java实现)
来源:互联网 发布:nginx 点播服务器 编辑:程序博客网 时间:2024/05/16 11:22
//假设有两个数,这两个数非常大而且无法用Java的整数类型表示,远远超出计算机的表达范围,用计算这两个数相乘的结果。我们首先应该想用字符串来表达这两个数,假设这两个字符串为n与m,那么这两个数相乘结果的位数为n+m或者是n+m-1,通过借助辅助空间O(n+m)来保存进位来帮助实现。
算法评价:
时间复杂度:O(n*m),空间复杂度O(n+m)(由于涉及到进位可能最坏时间复杂度远远超过了O(n*m))
public class BigNumMSultiply { public static void main(String[] args) { // TODO Auto-generated method stub String n="1231111111111111111111111"; String m="222331111111453532222222222"; char[] chs=new char[n.length()+m.length()]; for(int i=0;i<chs.length;i++){ chs[i]='0'; } int n1=0; int m1=0; int res=0; int startIndex=0; int num=0; String reString=""; for(int i=n.length()-1;i>=0;i--){ n1=n.charAt(i)-'0'; startIndex=n.length()-1-i; for(int j=m.length()-1;j>=0;j--){ m1=m.charAt(j)-'0'; res=n1*m1; loopAdd(chs,res,startIndex); ++startIndex; } } for(int i=chs.length-1;i>=0;i--){ if(chs[i]=='0'&&i==chs.length-1){ continue; } reString=reString+chs[i]; } System.out.println(reString); } private static void loopAdd(char[] chs,int num,int startIndex){ int mod=0; int index=0; mod=num%10; index=num/10; int data=chs[startIndex]-'0'+mod; while(true){ if(data<10){ chs[startIndex]=(char) (data+'0'); break; }else{ chs[startIndex]=(char) (data%10+'0'); data=data/10+index+chs[startIndex+1]-'0'; mod=data%10; index=data/10; startIndex++; } } }}
阅读全文
1 0
- 关于大数相乘问题(Java实现)
- 大数相乘问题(Java实现)
- Java实现大数相乘
- 大数相乘问题(java版)
- 大数算法 -- 正整数相乘(Java 实现)
- 俩个大数相乘(java实现)
- 大数相乘(java)
- 大数相乘(java)
- 大数相加 相乘 java实现
- Java实现两个大数相乘
- 大数相乘问题--算法思想及Java实现解析(附详细注释)
- 大数相乘 (JAVA版)
- 关于大数相乘
- poj2389 大数问题-大数相乘
- UVA 10106 - Product (大数相乘问题)
- 大数相乘问题
- 大数相乘问题---转载
- 大数相乘问题
- Java IO
- Another Easy Problem FZU
- Dropping water balloons UVA
- 搭建简单的struts2框架
- 现代计算机的存储体系 (转载)
- 关于大数相乘问题(Java实现)
- 找出数组中不同的两个数
- Spring+MyBatis多数据源配置实现
- 第五周java作业
- 考试总结2
- 01Redis学习
- lintcode Guess Number Game II
- 【福分系统】bootstrap表格控件
- jquery实现品牌列表的显示