【Java】自从有了BigInteger,我再也不用担心要处理的数据有多大了

想当年,在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的基本使用方法,就是构造方法与四则混合运算:

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中,甚至任何程序中都无法传递一个这么长的数,把这么长的数当作是参数使用。

时间: 2024-10-31 09:24:16

【Java】自从有了BigInteger,我再也不用担心要处理的数据有多大了的相关文章

zencart产品批量采集伪原创方法,再也不用担心与别人的数据重复了

首先,请你提供与产品相关的关键词一份,至于关键词如何来,相信做SEO的你很清楚了,SEO关键词搜索工具应该很多,比如谷歌相关关键词搜索,用记事本的形式保存为每行一个关键词.采集产品的时候,我会帮你将关键词插入到对应的地方.采集结果就是easy_populate.csv批量表的形式 一.产品SEO三要素伪原创 keywords.txt: veste barbour angers barbour veste beaufort barbour veste bedale veste barbour ja

android 傻瓜式 MultiDex 插件,从此再也不用担心方法数问题!

ndroid-Easy-MultiDex 项目地址:TangXiaoLv/Android-Easy-MultiDex 简介:Android 傻瓜式 MultiDex 插件,从此再也不用担心方法数问题! 注 1:不想看前半部分的话可以直接跳过到最下面配置部分.注 2:本插件是基于DexKnifePlugin 1.5.6优化改造而来,感谢 ceabie 的无私奉献. 填坑之路 坑 1:65536 ,So easy! 原因:Dalvik 的 invoke-kind 指令集中,method refere

妈妈再也不用担心我找不到文件了---find

1.find vs locate 在实际中,我们经常需要查找到一些特定文件,然后进行处理,LINUX提供了locate , find这两个命令用于文件查找. a.locate,非实时查找,非精确查找.linux会定期生成更新文件数据库,而locate将根据文件数据库进行查找.我们可以在使用locate命令前,更新文件数据库,使用updatedb即可.但是updatedb将会花费可能半天时间,SO LONG! b.find , 实时查找,精确查找.根据指定路径,查找标准,进行文件遍历(包括隐藏文件

Swift详解之四-------妈妈再也不用担心我的闭包了

妈妈再也不用担心我的闭包了 注:本文为作者自己总结,过于基础的就不再赘述 ,都是亲自测试的结果.如有错误或者遗漏的地方,欢迎指正,一起学习. swift中闭包是一个很强大的东西,闭包是自包含的函数代码块,可以在代码中被传递和使用.跟C 和 Objective-C 中的代码块(blocks)很相似 .这个大家必须掌握!必须掌握!必须掌握!重要的事情要说三遍 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.下面我们就来攻克它! 1.闭包函数

利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了

前几天,修电脑主析就捣鼓刷BIOS,结果刷完黑屏开不了机,立刻意识到完了,BIOS刷错了.就从网上查资料,各种方法试了个遍,什么用处都没有.终于功夫不负有心人,找到了编码器,知道了怎么用.下面看看具体用法: 先买了一个便宜点的编码器: <ignore_js_op> 把刷错的BIOS芯片先拆下来:<ignore_js_op> 把芯片放到编码器上: 再找一台电脑,我的笔记本派上用场了,下载编码器的驱动程序和编码器软件:  <ignore_js_op> <ignore_

Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS

Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误.苹果这次带来了革命性的提升. 在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目). 这样设置后,如果再出现类

妈妈再也不用担心我js跨域了。。

$.getJSON('http://www.example.com/?aa=bb&callback=?', function(r){ console.log(r) }); //callback=?参数带上,妈妈再也不用担心我跨域了.jquery的getJSON利用的也是JSONP的原理去实现的.

keycode 大全,javascript 再也不用担心我不知道的keycode了

keycode    8 = BackSpace BackSpace keycode    9 = Tab Tab keycode   12 = Clear keycode   13 = Enter keycode   16 = Shift_L keycode   17 = Control_L keycode   18 = Alt_L keycode   19 = Pause keycode   20 = Caps_Lock keycode   27 = Escape Escape keycod

Matlab命令合集 妈妈再也不用担心我不会用matlab了

matlab命令 一.常用对象操作:除了一般windows窗口的常用功能键外.1.!dir 可以查看当前工作目录的文件. !dir& 可以在dos状态下查看.2.who 可以查看当前工作空间变量名, whos 可以查看变量名细节.3.功能键:功能键 快捷键 说明方向上键 Ctrl+P 返回前一行输入方向下键 Ctrl+N 返回下一行输入方向左键 Ctrl+B 光标向后移一个字符方向右键 Ctrl+F 光标向前移一个字符Ctrl+方向右键 Ctrl+R 光标向右移一个字符Ctrl+方向左键 Ctr