【经验】 Java BigInteger类以及其在算法题中的应用
来源:互联网 发布:手机直播源码教程 编辑:程序博客网 时间:2024/05/17 11:57
【经验】 Java BigInteger类以及其在算法题中的应用
标签(空格分隔): 经验
本来在刷九度的数学类型题,有进制转换和大数运算,故而用到了java BigInteger类,使用了之后才发现真是业界良心!比C++求解进制转换题不知道方便到哪里去了!故作此文。
简介
首先,介绍一下BigIntger类。
BigInteger类是java为了处理大数字二专门制作的类,可以处理很大的数字(理论上无限大),并且可以实现大数字的类似于int所有数学运算。对算法题来说,再也不怕出现超出int范围的运算了!
同时,处理大浮点数的类是BigDecimal。
BigInteger主要能实现以下功能:
- 大整数的直接读取
- 大整数加减乘除,求余
- 求幂,绝对值,求相反数
- 判断是否相等,求两数的最大值,最小值
- 求公约数(厉害!)
- 求某数转成二进数后的位数
- 判断某个数是否为素数(可能判错)
- 获取某个数的下一个可能的素数
- ···
使用
使用时要引入包:
import java.math.BigInteger;
下面是基本的函数与参数介绍。
Ⅰ 基本函数:1.valueOf(parament); 将参数转换为制定的类型 比如 int a = 3; BigInteger b = BigInteger.valueOf(a); 则b=3; String s= "12345"; BigInteger c = BigInteger.valueOf(s); 则c = 12345;2.add(); 大整数相加 BigInteger a=new BigInteger(“23”); BigInteger b=new BigInteger(“34”); a.add(b);3.subtract(); 相减4.multiply(); 相乘5.divide(); 相除取整6.remainder(); 取余7.pow(); a.pow(b)=a^b8.gcd(); 最大公约数9.abs(); 绝对值10.negate(); 取反数11.mod(); a.mod(b)=a%b=a.remainder(b);12.max(); min();13.public int comareTo();14.boolean equals(); 是否相等15.shiftLeft():左移,this << n ,this*2^n; shiftRight():右移,this >> n,this/2^n;16.bitLength:返回该数的最小二进制补码表示的位的个数,即 *不包括* 符号位 (ceil(log2(this <0 ? -this : this + 1)))。对正数来说,这等价于普通二进制表示的位的个数。17.bitCount:返回该数的二进制补码表示中不包扩符号位在内的位的个数。该方法在 BigIntegers 之上实现位向量风格的集合时很有用。18.isProbablePrime:如果该 BigInteger 可能是素数,则返回 true ;如果它很明确是一个合数,则返回 false 。 参数 certainty 是对调用者愿意忍受的不确定性的度量:如果该数是素数的概率超过了 1 - 1/2**certainty方法,则该方法返回 true 。执行时间正比于参数确定性的值。19.nextProbablePrime():获取下一个可能的素数是多少20.BigInteger构造函数: 一般用到以下两种: BigInteger(String val);将指定字符串转换为十进制表示形式; BigInteger(String val,int radix);将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger
注意
1.其构造方法有很多,常用的邮: BigInteger(String val)
将 BigInteger 的十进制字符串表示形式转换为 BigInteger。 BigInteger(String val, int radix)
将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。
2.进行数学运算时不能直接使用数学运算符进行运算,必须使用其内部方法。而且其操作数也必须为BigInteger型。
3.当要把计算结果输出时应该使用.toString方法将其转换为10进制的字符串:System.out.print(two.toString());
算法使用
大整数基本运算
【九度OJ】题目1198:a+b 解题报告
【九度OJ】题目1076:N的阶乘 解题报告
【九度OJ】题目1190:大整数排序 解题报告
进制转换
我最喜欢的功能,因为直接实现了算法,就不用我写了。可以使用以下函数,转换成字符串后如果存在abc等字符默认的是小写,如果转换成大写可以加上.toUpperCase();
private static String change(String num, int from, int to) { return new BigInteger(num, from).toString(to);}
用到这个方法做到的题:
【九度OJ】题目1118:数制转换 解题报告
【九度OJ】题目1138:进制转换 解题报告
【九度OJ】题目1194:八进制 解题报告
【九度OJ】题目1080:进制转换 解题报告
【九度OJ】题目1208:10进制 VS 2进制 解题报告
【九度OJ】题目1473:二进制数 解题报告
【九度OJ】题目1194:八进制 解题报告
最大公约数
利用gcd函数。
【九度OJ】题目1056:最大公约数 解题报告
【九度OJ】题目1438:最小公倍数 解题报告
【九度OJ】题目1439:Least Common Multiple 解题报告
素数
利用isProbablePrime(10),nextProbablePrime().
【九度OJ】题目1047:素数判定 解题报告
【九度OJ】题目1163:素数 解题报告
【九度OJ】题目1040:Prime Number 解题报告
【九度OJ】题目1207:质因数的个数 解题报告
大浮点数
使用BigDecimal类进行同样的解决。
【九度OJ】题目1137:浮点数加法 解题报告
其它
待补充。
参考文献:
java中的BigInteger(很好很强大)(转)
JAVA大数处理(BigInteger,BigDecimal)
- 【经验】 Java BigInteger类以及其在算法题中的应用
- Java中的BigInteger在ACM中的应用
- 总结: Java BigInteger类在ACM中的应用
- JAVA拾遗 - 优先队列的探讨以及其在KNN算法中的应用
- java中的BigInteger类和BigDecimal类的应用
- AOP以及其在Spring中的应用(二)
- AOP以及其在Spring中的应用(二)
- java中BigInteger应用
- Java 中的BigInteger类 (转载)
- Java中的BigInteger
- java中的BigInteger
- java中的BigInteger
- java中的BigInteger
- 【正整数模板运算(C++手写BigInteger类和java.math.BigInteger以及java.math.BigDecimal)】
- java中biginteger和bigdecimal在大数计算中的使用
- Java中的java.math.BigInteger
- Java的BigInteger的应用
- 关于JAVA中的listener回调机制,以及其在Android中的使用
- [BZOJ4449][Neerc2015][分治][最短路]Distance on Triangulation
- 关于CGI的一些认识
- poj1321
- A water problem
- Fragment切换与Fragment间传值
- 【经验】 Java BigInteger类以及其在算法题中的应用
- BZOJ 3224 Tyvj 1728 普通平衡树——treap
- hibernate实现多条件组合的模糊查询
- java实现——2001计算两点间的距离
- Firefox在input标签padding上下边距过大时的bug现象
- MERGE语句用来合并UPDATE和INSERT语句,一张表的大数据操作,要同时进行增删改,提高性能
- 中国剩余定理(非互质)hdu3579 Hello Kiki ====注意刚好全部整除的情况
- Leetcode twosum
- 安装SQuirrel SQL Client连接Phoenix操作HBase