关键词:
Java大数BigInteger-用法记录
在处理数据比较大的题目的时候,并且不允许提交python代码的情况下,可以采用Java大数来进行处理
由于Java的内存回收机制等方面的原因,会导致Java的时间限制比其它语言的要大一些,一般情况下是其它语言的两倍
比如说有这么一个题:
判断两个数那个大那个小,聪明的小朋友就用小学的知识将分母乘上去,但是看一眼数据范围的话,1e18 * 1e9是行不通的,当然这个题也可以用模拟的方式来进行处理,但是这里用Java大数的方式来处理一下
Java的大数分为两种,一种是整数类型的,一种是小数类型的BigDecimal
,一种是整数类型的BigInteger
本篇文章就讲一下Java中BigInteger的使用
提交代码
- 在提交Java代码的时候,不能含有导入的包package的名字
- 在新建Java类的过程中,一般情况下要将类命名为
Main
否则再提交代码之后会报错 - 提交的代码中一定要有
import java.math.BigInteger;
import java.util.Scanner;
这种代码,其中第一个是BigInteger
所在的jar 包
对于上面这道题的代码,可以提交为:
import java.math.*;
import java.util.*;
public class Main
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
long x = sc.nextLong();
long a = sc.nextLong();
long y = sc.nextLong();
long b = sc.nextLong();
BigInteger xx = BigInteger.valueOf(x);
BigInteger aa = BigInteger.valueOf(a);
BigInteger yy = BigInteger.valueOf(y);
BigInteger bb = BigInteger.valueOf(b);
if(xx.multiply(bb).compareTo(yy.multiply(aa)) == 1) System.out.println(">");
else if(xx.multiply(bb).compareTo(yy.multiply(aa)) == -1) System.out.println("<");
else System.out.println("=");
使用方式
构造一个对象
常用的有两种方式,一种是用字符串构造出来,一种是用long类型的证书构造出来
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
对于要输入的一个BigInteger类型的数,则可以采用如下方式进行构造出来
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger c = cin.nextBigInteger();
加 add
a = a.add(b);
减 subtract
a = a.subtract(b);
乘 multiply
a = a.multiply(b);
除 divide
a = a.divide(b);
对于上面的总共的代码:
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
BigInteger c = cin.nextBigInteger();
System.out.println(a);
System.out.println(b);
System.out.println(c);
a = a.add(b);
System.out.println(a);
a = a.subtract(b);
System.out.println(a);
a = a.multiply(b);
System.out.println(a);
a = a.divide(b);
System.out.println(a);
在输入了789之后,可以见到如下的加减成熟之后的结果
一定要注意在操作的过程中不要忘记对一个数重新赋值
比如在要将a * b的时候,一定要写
a = a.multiply(b);
而不是
a.multiply(b);
这样不会报错,但是并没有改变变量a
的值
gcd 最大公约数
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
BigInteger gcd = a.gcd(b);
System.out.println(gcd);
///对应输出为3
lcm 最小公倍数
a * b == gcd(a,b) * lcm(a,b)
mod %
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
BigInteger mod = a.mod(BigInteger.valueOf(11));
System.out.println(mod);
pow ^次方
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
BigInteger pow = a.pow(2);
System.out.println(pow);
abs 绝对值
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
a = a.multiply(BigInteger.valueOf(-1));
System.out.println(a);
a = a.abs();
System.out.println(a);
对应输出为:
开方sqrt
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
a = a.sqrt();
System.out.println(a);
对应输出为:
modPow 次方取余
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
a = a.modPow(BigInteger.valueOf(2),BigInteger.valueOf(100));
System.out.println(a);
对应输出为:
equals判断是否相等
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
if(a.equals(b)) System.out.println("1: equal");
else System.out.println("1: not equal");
a = BigInteger.valueOf(456);
if(a.equals(b)) System.out.println("2: equal");
else System.out.println("1: not equal");
对应输出为:
compareTo 比较大小
import java.math.BigInteger;
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
BigInteger a = new BigInteger("123");
BigInteger b = BigInteger.valueOf(456);
int flag = 0;
flag = a.compareTo(b);
System.out.println("a:" + a + "--" + b + " " + flag);
a = b;
flag = a.compareTo(b);
System.out.println("a:" + a + "--" + b + " " + flag);
b = BigInteger.valueOf(123);
flag = a.compareTo(b);
System.out.println("a:" + a + "--" + b + " " + flag);
对应输出为:
前一个数大于后面的数 结果为1
两数相等返回结果为0
后面的数大于前面的数 结果为-1
常用的就上面这些啦
java中bigdecimal和biginteger用法知识点补充(代码片段)
...0c;写几个BigDecimal类型的方法熟悉下用法,同时还遇到BigInteger的用法,一起特此记录下!BigDecimaljava.lang.Objectja 查看详情
java中大数的处理方案biginteger和bigdecimal类的使用(代码片段)
BigInteger和BigDecimal的介绍应用场景:1、BigInteger适合保存比较大的整型2、BigDecimal适合保存精度更高的浮点型(小数)一、BigInteger类的使用详解,代码如下publicclassBigInteger_publicstaticvoidmain(String[]args)//当我们编程中,需要... 查看详情
java中大数的处理方案biginteger和bigdecimal类的使用(代码片段)
...f0c;忍不住也分享一下给大家,👉点击跳转到网站BigInteger和BigDecimal的介绍应用场景:1、BigInteger适合保存比较大的整型2、BigDecimal适合保存精度更高的浮点型(小数)一、BigInteger类的使用详解, 查看详情
java大数详细讲解
介绍java中用于操作大叔的类主要有俩种第一个是BigInteger,代表大整数。第二个是BigDecimal,代表大浮点数。两种类的操作方法类似,所以我们只讲解BigInterger的用法基本用法Scannerinput=newScanner(System.in);BigIntegera=input.nextBigInteger();Big... 查看详情
java大数类库初始化biginteger问题
我在初始化BigInteger时,①BigIntegera=newBigInteger("123");system.out.print(a);②BigIntegerb=newBigInteger("abc");system.out.print(b);第一句是可以正确输出123的,但是第二句不会输出abc。请问,我要做什么修改,能够使得JAVA将数字以外... 查看详情
java中bigdecimal和biginteger用法知识点补充(代码片段)
...0c;写几个BigDecimal类型的方法熟悉下用法,同时还遇到BigInteger的用法,一起特此记录下!BigDecimaljava.lang.Objectjava.lang.Numberjava.math.BigDecimalBigDecimal可以表示一个任意大小且精度完全准确的浮点数publicstaticvoidmain(String[]args)... 查看详情
java大数
publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);BigIntegera=input.nextBigInteger();intcount=0;for(BigIntegeri=BigInteger.valueOf(1);;i=(i.multiply(BigInteger.valu 查看详情
小航的算法日记大数计算
...念二、常用方法1.常见用法1.1BigInteger2.2BigDecimal一、概念java.math.*包中提供了大数类,其理论上可以存储无限位的大数,只要内存足够的话。大数类又分为整数和浮点数... 查看详情
java中biginteger用法的详解(代码片段)
...那么该如何处理这些“大数据”呢?在java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,从原则上是可以表示“天文单位”一样大的数字咯,但有一个缺点就是比较费内存!在这里,我们详细... 查看详情
大数处理
Java中在BigInteger类中封装了多种操作,除了基本的加、减、乘、除操作之外,还提供了绝对值、相反数、最大公约数以及判断是否为质数等操作。当使用BigInteger类时,可以实例化一个BigInteger对象,并自动调用相应... 查看详情
求编个java程序要求:编写一个求大数的阶乘,不能用biginteger,并且使用数组不能浪费,不
求编个java程序要求:编写一个求大数的阶乘,不能用biginteger,并且使用数组不能浪费,不能有空位,输出计算时间,结果和结果的位数。另外有5Q的奖励!做毕业设计用的吧?我两年前帮哥们写过一个,乘法加法和一些简单的... 查看详情
java如何创建一个类或方法能够给出指定位数的一个随机“大数”?
...)可以给出一个100000位的数字,注意是100000位。可否结合BigInteger和Random?最好有具体代码,谢谢!一个大数一般都是使用数组存储的。比如使用byte[],一个byte可以表示0-99,或者使用字符串存储大数.那么,class BigInteger &nbs... 查看详情
biginteger的用法
...a自带类不明确的,可以直接查询jdkAPI文档的嘛。publicclassBigIntegerextendsNumberimplementsComparable<BigInteger>不可变的任意精度的整数。所有操作中,都以二进制补码形式表示BigInteger(如Java的基本整数类型)。BigInteger提供所有Java的... 查看详情
java全栈javase:19.常用类之大数运算日期和日历包装类(代码片段)
...象.超过取出范围了,不能称为数字了,称为对象java.math包:BigInteger大整数,BigDecimal大浮点(高精度,不损失精度)BigInteger类使用,计算超大整数的构造方法直接newBigInteger(Stringstr)数字格式的字符串,长度任意BigIntegeradd( 查看详情
大数运算(整数)(代码片段)
BigIntegerStruct(System.Numerics)|MicrosoftDocshttps://docs.microsoft.com/en-us/dotnet/api/system.numerics.biginteger?view=netcore-3.1 RemarksThe BigInteger typeisanimmutabletypet 查看详情
java高新技术——大数操作(bigintegerbigdecimal)(代码片段)
本文目标可以使用BigInteger操作大整数可以使用BigDecimal指定小数的保留位数基础知识对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:-(2的31次方)~(2的31次方)减1最大负数:1000000... 查看详情
java中,如何对大数开根号啊!
在Java中,有没有对一个BigInteger,BigDecimal数开根号的函数,如果有,函数是什么?如果没有,怎么处理这个问题?解决后,追加分!假如开根号是一个无限小数,要怎样保存自己想要的n位呢?例如sqrt(3),我想保存1000位,怎么搞啊... 查看详情
java大数阶乘,不用biginteger怎么做
1024!也就是只能用JAVA基础编程的知识来实现,一道笔试题来的。。。请教。具体怎么写啊!~字符串弄起来也很长啊,怎么实现它们相乘参考技术A字符串效率很低用数组来做效率高很多下面是求1000项的Fibonaci数列,你参考下改... 查看详情