A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张超超 黑马帝   /  2012-4-16 14:16  /  4202 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JAVA如何创建一个大整数类,能放10000位以上的大整数

3 个回复

倒序浏览
只能放数组吧 还想BigIntger 也不行啊
回复 使用道具 举报
首先,计算机中用固定数量的几个字节来存储的数值,所以计算机中能够表示的数值是有一定的范围的,为了便于讲解和理解,我们先以byte 类型的整数为例,它用1个字节进行存储,表示的最大数值范围为-128到+127。-1在内存中对应的二进制数据为11111111,如果两个-1相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,11111110,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为11111110,也就是-2,这正好利用溢位的方式实现了负数的运算。-128在内存中对应的二进制数据为10000000,如果两个-128相加,不考虑Java运算时的类型提升,运算后会产生进位,二进制结果为1,00000000,由于进位后超过了byte类型的存储空间,所以进位部分被舍弃,即最终的结果为00000000,也就是0,这样的结果显然不是我们期望的,这说明计算机中的算术运算是会发生越界情况的,两个数值的运算结果不能超过计算机中的该类型的数值范围。由于Java中涉及表达式运算时的类型自动提升,我们无法用byte类型来做演示这种问题和现象的实验,大家可以用下面一个使用整数做实验的例子程序体验一下:

         int a = Integer.MAX_VALUE;

         int b = Integer.MAX_VALUE;

         int sum = a + b;

         System.out.println(“a=”+a+”,b=”+b+”,sum=”+sum);



先不考虑long类型,由于int的正数范围为2的31次方,表示的最大数值约等于2*1000*1000*1000,也就是20亿的大小,所以,要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下:

()这个类内部有两个成员变量,一个表示符号,另一个用字节数组表示数值的二进制数

()有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中

()提供加减乘除的功能

public class BigInteger

{

         int sign;

         byte[] val;

         public Biginteger(String val)

         {

               sign = ;

               val = ;

         }

         public BigInteger add(BigInteger other)

         {

               

         }

         public BigInteger subtract(BigInteger other)

         {

               

         }

         public BigInteger multiply(BigInteger other)

         {

               

         }

         public BigInteger divide(BigInteger other)

         {

               

         }



}

评分

参与人数 1技术分 +2 黑马币 +30 收起 理由
贠(yun)靖 + 2 + 30 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王永旺 于 2012-4-16 23:47 编辑

java中提供了两个计算高精度的类BigIntegerBigDecimal
BigInteger 支持任意精度的整数。也就是说在运算中你可以表示任何大小的整数值,而 不会丢失任何信息。
BigDecimal支持任意精度的定点数。可以用它进行 精确的货币计算。
具体使用方法和基本类型相似。
可查阅API文档,在java.math.*下面。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马