自从有了BigInteger,我再也不用担心要处理的数据有多大了
2017-06-12 14:59
330 查看
想当年,在C语言的学习中,我们常常被灌输,int的范围不能超过2^32如果你的操作系统是64位的还能去到2^64,而long则是固定2^32,如果你要用到更大的数则应该用double等浮点型表示,虽然double的长度是你操作系统的位长,但表示大型数据的时候仍然会丢失精度,因此C语言甚至还出现一些表示大数据但不能够丢失精度的数组题,记得当时候我也曾经做过,使用一个循环结构来对一个超长数据字符串,比如64个1,不停地对10取余,然后之后要实现加减乘除,非常复杂的,与之后学习的汇编语言时候,仅能使用位移来实现加减乘除时候,那个程序写得老长老长。
当然,平时也无须考虑这么多,因为我们处理的数据基本上很少超过int的2^32,毕竟我们不是读数学系的,int的长度已经是足够了,我们处理的数据其实很多时候超过255就不错了。不过,如果你让我处理一个超长数据,我放在Java中仍然能够轻松解决,毕竟Java已经把大数据的处理封装在BigInteger中。
如下是BigInteger的基本使用方法,就是构造方法与四则混合运算:
对了,记得在头部使用import java.math.*;因为BigInteger要用到这个类
下面是上面这段方法被调用之后的运行结果:
======BigInteger数据结构的测试开始======
num1加上num2的结果为:12222222222222222222222222222222222222222222222222222222222222
num1减去num2的结果为:-10000000000000000000000000000000000000000000000000000000000000
num1乘以num2的结果为:12345679012345679012345679012345679012345679012345679012345677654320987654320987654320987654320987654320987654320987654321
num1除以num2的商为:0
num1除以num2的余数为:1111111111111111111111111111111111111111111111111111111111111
num1对2取余(也就是num1是否为双数)的结果是:1
======BigInteger数据结构的测试结束======
1、加减乘除取余分别使用add,subtract,multiply,divide,mod方法,与平常程序的运算符一样,所谓的除只是求出两数之商
2、上述所有方法里面放的必须是BigInteger类型的东西
3、BigInteger的构造方法里面必须是一个字符串,不能是一个数,例如new BigInteger(1111111111111111111111111111111111111111111111111111111111111);是错误的,因为Java中,甚至任何程序中都无法传递一个这么长的数,把这么长的数当作是参数使用。
当然,平时也无须考虑这么多,因为我们处理的数据基本上很少超过int的2^32,毕竟我们不是读数学系的,int的长度已经是足够了,我们处理的数据其实很多时候超过255就不错了。不过,如果你让我处理一个超长数据,我放在Java中仍然能够轻松解决,毕竟Java已经把大数据的处理封装在BigInteger中。
如下是BigInteger的基本使用方法,就是构造方法与四则混合运算:
public static void BigIntegertest() { BigInteger num1 = new BigInteger( "1111111111111111111111111111111111111111111111111111111111111"); BigInteger num2 = new BigInteger( "11111111111111111111111111111111111111111111111111111111111111"); System.out.println("num1加上num2的结果为:" + num1.add(num2)); System.out.println("num1减去num2的结果为:" + num1.subtract(num2)); System.out.println("num1乘以num2的结果为:" + num1.multiply(num2)); System.out.println("num1除以num2的商为:" + num1.divide(num2)); System.out.println("num1除以num2的余数为:" + num1.mod(num2)); System.out.println("num1对2取余(也就是num1是否为双数)的结果是:" + num1.mod(new BigInteger("2"))); }
对了,记得在头部使用import java.math.*;因为BigInteger要用到这个类
下面是上面这段方法被调用之后的运行结果:
======BigInteger数据结构的测试开始======
num1加上num2的结果为:12222222222222222222222222222222222222222222222222222222222222
num1减去num2的结果为:-10000000000000000000000000000000000000000000000000000000000000
num1乘以num2的结果为:12345679012345679012345679012345679012345679012345679012345677654320987654320987654320987654320987654320987654320987654321
num1除以num2的商为:0
num1除以num2的余数为:1111111111111111111111111111111111111111111111111111111111111
num1对2取余(也就是num1是否为双数)的结果是:1
======BigInteger数据结构的测试结束======
1、加减乘除取余分别使用add,subtract,multiply,divide,mod方法,与平常程序的运算符一样,所谓的除只是求出两数之商
2、上述所有方法里面放的必须是BigInteger类型的东西
3、BigInteger的构造方法里面必须是一个字符串,不能是一个数,例如new BigInteger(1111111111111111111111111111111111111111111111111111111111111);是错误的,因为Java中,甚至任何程序中都无法传递一个这么长的数,把这么长的数当作是参数使用。
相关文章推荐
- 【Java】自从有了BigInteger,我再也不用担心要处理的数据有多大了
- Java大数据处理(BigInteger)
- 【java基础】大数据的处理:java.math.Number/BigInteger/BigDecimal
- Java笔试题——2的100次方,不用大数据类(Biginteger)来解答
- java 中的大数据类型(BigInteger和BigDecimal)
- 黑马程序员----日期Date类,日历 Calendar类。Math类的一部分,大数据运算BigInteger,BigDecimal。
- JAVA大数处理(BigInteger,BigDecimal)
- 使用BigInteger处理大二进制数
- java 中如何处理大整数-java.BigInteger的使用
- java中不用BigInteger实现超大整数的乘法操作
- 求证:在处理数据时 java 手动释放变量的实际意义有多大
- 【推荐软件】自从用了 f.lux,再也不用担心被高色温渣屏蓝瞎眼了
- java.math.BigInteger类型的数据转成int
- JAVA中大数字的的处理:BigInteger和BigDecimal
- java.math.BigDecimal 对浮点数据的精度处理
- java 中的大数据类型(BigInteger和BigDecimal)
- 处理大数字BigInteger与BigDecimal
- java 中的大数据类型(BigInteger和BigDecimal)
- java 中的大数据类型(BigInteger和BigDecimal)
- JAVA大数处理(BigInteger,BigDecimal)