大整数乘法原理(JAVA)
2013-09-27 11:21
204 查看
在JAVA中int的字长变成了32位,但是对于两个上亿的数来说,让这两个数相乘,就会超出她的范围,有人会说那就用Long型,对于Long型,当两大于10亿数相乘,就会超出她的范围,有人会说那就用Double型,这也是一种解决办法,他有两个缺点,①对于两个太大的数,他就会用科学计数法来表示,你就不能看到她的全部部分,只能看到,例如:9.198429228235586E307前几位数字,这并不是我们想看到的,②他最多能到10的308次方,不能再向上了,但是对于大多数人还是可以的,但是第一个缺点很麻烦,那如何计算大整数乘法呢,让我们模拟计算机的乘法原理。小学时的乘法原理。
1 1
*
1 1
1 1
+1 1
1 2
1即可
代码如下:
仅供参考,如果某个大师有更好的算法,向我分享一下。我感激不尽,
1 1
*
1 1
1 1
+1 1
1 2
1即可
代码如下:
ackage com.temp; import java.util.Arrays; public class Cheng { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Cheng cheng=new Cheng(); cheng.cheng(); } public void cheng() { int jin=0;//进位标志 byte []c1=new byte[300];//第一个数的大小(上面的乘数) byte []c2=new byte[300];//第一个数的大小(下面的乘数) byte []c3=new byte[400];//乘积的结果 String s1="1234567891111";//第一个数 String s2="98765432111";//第二个数 //我们在计算时,常常将短的写在下面 即11*120 我们往往将120写在上面,将11写在下面 //交换两个数 if(s1.length()<s2.length());{ String temp=s1; s1=s2; s2=temp; } //将第一个数放入到c1中 for(int i=s1.length()-1;i>=0;i--){ c1[s1.length()-1-i]=(byte) (s1.charAt(i)-'0'); } //将第二个数放入到c2中 for(int i=s2.length()-1;i>=0;i--){ c2[s2.length()-1-i]=(byte) (s2.charAt(i)-'0'); } //循环相乘 int i=0; int j=0; for(i=0;i<s2.length();i++){ //进位清零 jin=0; for(j=0;j<s1.length();j++){ //让两个数相乘并加上进位 int temp= (c2[i]*c1[j]+jin); //得到进位 jin=temp/10; //将余数放入到指定位置(两个数相乘正好等于第一数的位置+第二个数的位置) c3[i+j]+=(byte) (temp%10); //当这一位大于等于10时,说明他有进位 if(c3[i+j]>=10){ temp=c3[i+j]; //将余数放入到指定位置(两个数相乘正好等于第一数的位置+第二个数的位置) c3[i+j]=(byte) (temp%10); //进位+=进位 jin+=temp/10; } } //当小循环结束,当进位大于零,说明他向前有进位 if(jin>0){ //得到进位 c3[i+j]=(byte) jin; } } //当大循环结束,进位大于零,说明他向前有进位, if(jin>0){ c3[i+j-1]=(byte) jin; } //打印结果。两个数相乘不可能大于这两个数的长度相加 boolean b=true; for(i=s1.length()+s2.length();i>=0;i--){ if(b){ if(c3[i]!=0){ System.out.print(c3[i]); b=false; } } else{ System.out.print(c3[i]); } } } }
仅供参考,如果某个大师有更好的算法,向我分享一下。我感激不尽,
相关文章推荐
- java正则表达式验证整数、浮点数和日期
- 计蒜客 Floppy Cube ACM/ICPC 2017 Qingdao(bfs+polya+Java大整数)
- java实现计算两个整数的最大公约数代码及附图
- Java声明一个10个元素的整数数组,随机赋值,打印输出,排序后,打印输出
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- java求两个整数百分比
- 1006. 换个格式输出整数 (15)(Java实现)
- 编写Java程序,输入3个整数,并求出3个整数的最大值和最小值。
- JAVA_ 求三个整数的最大值(split()用法)
- Java中使用BigDecimal进行浮点数精确计算、超大整数、浮点数等计算,没有数位限制
- 剑指Offer面试题11(Java版):数值的整数次方
- java 大整数运算以及BigInteger的用法
- java 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- Java基础问题---计算一个整数的百位上的数,源代码
- Java判断一个整数是否为水仙花数
- Java进阶(五十二)两个整数相除得到小数点并保留两位小数的方法
- Java课程设计 大整数类 实现加法
- java编程之对10个整数进行排序(从对话窗体输入数据)
- Java中判断一个数是整数
- [Java] 练习题015: 输入三个整数x,y,z,请把这三个数由小到大输出。