【经验】 Java BigInteger类以及其在算法题中的应用
2017-03-06 20:42
309 查看
【经验】 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^b 8.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拾遗 - 优先队列的探讨以及其在KNN算法中的应用
- 总结: Java BigInteger类在ACM中的应用
- 【正整数模板运算(C++手写BigInteger类和java.math.BigInteger以及java.math.BigDecimal)】
- Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现
- 数据结构与算法(Java描述)-5、循环链表仿真链表以及循环链表应用
- java一个算法题:输出一个字符串中出现次数最多的字符,以及次数
- java常见的开源算法支持以及java默认支持的provider
- Java语言的出现背景、主要特点、发展历程以及Java技术的应用
- java与com组件互访,Jacob的入门以及经验
- Java property文件中文解决方案以及native2ascii应用
- [spring]事务传播级别隔离级别以及高并发下的应用经验
- java collection 知识点 以及在测试中的应用【待学习】
- SharePoint Server 2003的应用经验以及备份与恢复
- Java高新技术2--JAVA中枚举的各种应用以及单例模式
- JSP开发中的JavaBean的应用以及部署
- JSP开发中的JavaBean的应用以及部署
- Java property文件中文解决方案以及native2ascii应用
- 科普一下算法的度量——Big O, Big Omega, Big Theta以及Udi Manber的大OO
- 什么是正则表达式以及在Java1.4中的应用
- JAVA整型数组排序算法以及改进算法