(部分转载,部分原创) java大数类(1)

头文件:

import java.io.*;

import java.util.*;

import java.math.*;

BigInteger属于java.math.BigInteger

读入: 

Scanner cin = Scanner (System.in);

while(cin.hasNext())//等价于!=EOF

n=cin.nextInt(x);//读入一个int型x进制的数,一般x缺省,默认十进制

n=cin.nextBigInteger(x);//读入一个x进制的大整数,一般x缺省,默认十进制

数据类型:

BigInteger 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的

BigDecimal 任意大的实数,可以处理小数精度问题。

BigInteger中一些常见的常数:

BigInteger.ZERO, BigInteger.ONE, BigInteger.TEN

将int型的数赋值给BigInteger:

BigInteger.valueOf(k);

定义一个x进制的BigInteger:

BigInteger a = new Bigteger("123", x);

x缺省默认为十进制

基本的函数:

valueOf():  赋初值

add():  + a.add(b);

subtract():  -

multiply():  *

divide():  /

remainder():  this % val

divideAndRemainder():  a[0]=this / val; a[1]=this % val

pow():  a.pow(b)=a^b

gcd(), abs():  公约数,绝对值

negate():  取负数

signum():  符号函数

mod():  a.mod(b)=a%b;

shiftLeft():  左移,this << n ,this*2^n;

shiftRight():  右移,this >> n,this/2^n;

and():  &&,且;

or():  ||,或;

xor():  ^, 异或

not():  !, 非;

bitLength():  返回该数的最小二进制补码表示的位的个数,即 *不包括* 符号位 (ceil(log2(this <0 ? -this : this + 1)))。对正数来说,这等价于普通二进制表示的位的个数。

bitCount():   返回该数的二进制补码表示中不包扩符号位在内的位的个数。该方法在 BigIntegers 之上实现位向量风格的集合时很有用。

isProbablePrime():    如果该 BigInteger 可能是素数,则返回 true ;如果它很明确是一个合数,则返回 false 。 参数 certainty 是对调用者愿意忍受的不确定性的度量:如果该数是素数的概率超过了 1 - 1/2**certainty方法,则该方法返回 true 。执行时间正比于参数确定性的值。

compareTo():      根据该数值是小于、等于、或大于 val 返回 -1、0 或 1;

equals():      判断两数是否相等,也可以用compareTo来代替;

min(),max():      取两个数的较小、大者;

intValue(),longValue(),floatValue(),double():     把该数转换为该类型的数的值。

toString(x):   当要把计算结果输出时应该使用.toString(x)方法将其转换为x进制的字符串,一般x缺省,默认为十进制。

类型转换:

int -> BigInteger :

int a = 3;

BigInteger b = BigInteger.valueOf(a);

BigInteger -> int :

BigInteger a = BigInteger.TEN;

int b = a.intValue();

int -> String :

int a = 3;

String b = a.toString();

String -> int :

String a = "123";

int b = Intrger.parseInt(a);

(还有Float.parseFloat(),用法类似)

String -> BigInteger :

String a = "123";

BigInteger b = new BigINteger(a);

BigInteger -> String :

BigInteger a = BigInteger.TEN;

String b = a.toString();

进制转换:

10进制 -> 16进制:

Integer.toHexString(4);

10进制 -> 2进制:

Integer.toBinaryString(4);

16进制 -> 10进制:

Integer.parseInt("4", 16);

 注意:

关于remaindermod的区别:

BigInteger remainder(BigInteger val)
 和mod类似,区别在于remainder是取余运算,mod是模运算,具体区别如下图:

时间: 2025-01-31 06:57:44

(部分转载,部分原创) java大数类(1)的相关文章

HDU 5047 Sawtooth (JAVA大数类)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 题面: Sawtooth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1636    Accepted Submission(s): 637 Problem Description Think about a plane: ● O

多校第六场 HDU 4927 JAVA大数类

题目大意:给定一个长度为n的序列a,每次生成一个新的序列,长度为n-1,新序列b中bi=ai+1?ai,直到序列长度为1.输出最后的数. 思路:这题实在是太晕了,比赛的时候搞了四个小时,从T到WA,唉--对算组合还是不太了解啊,现在对组合算比较什么了-- import java.io.*; import java.math.*; import java.util.*; public class Main { public static void main(String[] args) { Sca

HDU高精度总结(java大数类)

  HDU1002   A + B Problem II [题意]大数相加 [链接]http://acm.hdu.edu.cn/showproblem.php?pid=1002 Sample Input 2 1 2 112233445566778899 998877665544332211 Sample Output Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110 代码

Java大数类介绍

java能处理大数的类有两个高精度大整数BigInteger 和高精度浮点数BigDecimal,这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal;或者import java.math.*; 下面从几个方面对BigInteger和BigDecima做一个简单的比较: 一.常量 BigInteger:ONE,ZERO,TEN分别代表1,0,10. 其定义类似于:pub

java大数类操作以及应用(UVA)

首先,先看看java大数的基本操作 Ⅰ基本函数: 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"); BigIntege

JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)

当基础数据类型长度无法满足需求时可以使用大数类 构造方法接受字符串为参数 1 BigInteger bInt = new BigInteger("123123"); 2 BigDecimal bDouble = new BigDecimal("123123.123123124"); 基础操作(取模使用divideAndRemainder方法,返回的数组第二个元素为余数): BigDecimal在做除法时必须设定传入精度(保留多少位小数),否则会出现异常:java.l

Java 大数类BigInteger和BigDecimal的基本函数

在Java中有两个类BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运算变得很简单,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大. 这两个类都在java.math.*包中,因此每次必须在开头处引用该包. Ⅰ基本函数: 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3; BigInteger

HDU 5050 Java 大数类+读入二进制

http://acm.hdu.edu.cn/showproblem.php?pid=5050 才知道 原来JAVA这么好用,连二进制都封装好了 in.nextBigInteger(2)  就是按二进制读入 当然a.gcd(b).toString(2)  是按二进制输出一个二进制String,  a,b是大数 另外,JAVA交代码原来是class Main import java.math.BigInteger; import java.util.Scanner; public class Mai

java大数类

NYOJ 773  开方数 http://acm.nyist.net/JudgeOnline/problem.php?pid=773 1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String[] args){ 5 int n; 6 double p; 7 Scanner cin = new Scanner(System.in); 8 while(true){ 9 n = cin.next