【经验】 Java BigInteger类以及其在算法题中的应用
【经验】 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 BigInteger类以及其在算法题中的应用的更多相关文章
- Java在算法题中的输入问题
Java在算法题中的输入问题 在写算法题的时候,经常因为数据的输入问题而导致卡壳,其中最常见的就是数据输入无法结束. 1.给定范围,确定输入几个数据 直接使用普通的Scanner输入数据范围,然后使用 ...
- 14-03 java BigInteger类,BigDecimal类,Date类,DateFormat类,Calendar类
BigInteger类 发 package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进 ...
- JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中
处理JSON字符串时,一直出错,写个样例后发现原来是没有弄清楚数据的格式问题. 实现的是 JSONString 转换成java对象 或是 list列表 实例类 News package lyx.ent ...
- python在算法题中判断输入结束(EOF)
有些算法题是这样要求的,一行输入一行数据,然后没有规定我要输入多少行,你要自行判断文件结束EOF,否则是会runtime error的,因为oj内部都是用文件来进行读写的. 例如a+b,每一行输入a ...
- java BigInteger类的用法
import java.math.BigInteger; Scanner in = new Scanner(System.in); BigInteger x1 = new BigInteger(&qu ...
- Java写算法题中那些影响你效率的细节(关于暴力破解算法题的细节处理)
QQ讨论群:99979568 多交流才能进步 暂时写到这里,有不懂的欢迎评论, 如果有什么其他提高效率的细节,欢迎评论或者私信我,小编一定努力学习,争取早日分享给大家 如果大家嫌三连累的话,可以看看这 ...
- LeetCode算法题-Design LinkedList(Java实现)
这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...
- LeetCode算法题-Kth Largest Element in a Stream(Java实现)
这是悦乐书的第296次更新,第315篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第164题(顺位题号是703).设计一个类来查找流中第k个最大元素.请注意,它是排序顺序 ...
- LeetCode算法题-Valid Palindrome II(Java实现)
这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...
随机推荐
- 比对软件Blast,Blast+,Diamond比较
1. Blast (1)格式化数据库 formatdb -i db.seq -p T -o T -l logfile 主要参数: -i 输入需要格式化的源数据库名称 -p 文件类型,是核苷酸序列数据库 ...
- Docker将容器制作成镜像并提交到远程仓库
Docker将容器制作成镜像并提交到远程仓库 步骤如下 先在dockerhub上创建一个自己的用户https://hub.docker.com/.或者在阿里云也可以. 2. 然后先创建一个空的镜像名. ...
- 内网穿透—使用 frp 实现内外网互通
前言 什么是内网穿透? 内网穿透,又叫 NET 穿透,是计算机用语.用通俗的说法就是你家里的个人电脑,可以直接被外网的人访问.例如你在公司,不通过远程工具,直接也可以访问到家里的电脑(本文章特指 we ...
- E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing
解决办法:apt-get update或者apt-get cleanapt-get update 或者 apt-get update --fix-missing问题解析1 source本身的问题 根据 ...
- Angular @ViewChild,Angular 中的 dom 操作
Angular 中的 dom 操作(原生 js) ngAfterViewInit(){ var boxDom:any=document.getElementById('box'); boxDom.st ...
- Maven 学习第一步[转载]
转载至:http://www.cnblogs.com/haippy/archive/2012/07/04/2576453.html 什么是 Maven?(摘自百度百科) Maven是Apache的一个 ...
- C++最小内积
Description 向量是几何中的一个重要概念. 考虑两个向量 v1=(x1,x2,...,xn)和v2=(y1,y2,...,yn),向量的内积定义为 x1y1+x2y2+...+xnyn 例如 ...
- Output of C++ Program | Set 17
Predict the output of following C++ programs. Question 1 1 #include <iostream> 2 using namespa ...
- 为Python的web框架编写前端模版的教程
虽然我们跑通了一个最简单的MVC,但是页面效果肯定不会让人满意. 对于复杂的HTML前端页面来说,我们需要一套基础的CSS框架来完成页面布局和基本样式.另外,jQuery作为操作DOM的JavaScr ...
- 【Linux】【Services】【Project】Cobbler自动化装机
1. 概念 1.1. Cobbler 1.2. PXE 1.3. 2. 版本信息 2.1. OS:Red Hat Enterprise Linux Server release 7.3 (Maipo) ...