BigInteger & BigDecimal

Nannan Lv5

BigInteger & BigDecimal

1.BigInteger

高精度整数

头文件:

1
import java.math.BigInteger ;

1.1类型转换

1.1.1 string BigInteger

1
Biginteger a = new Biginteger("-114514");

1.1.2long BigInteger

1
2
3
4
5
6
// 第一种
Biginteger a = new BigInteger(-114514L + "");

// 第二种
Biginteger a = BigInteger.valueOf(-114514L);

1.1.3 BigIntegerString

1
2
3
4
5
6
7
BigInteger a = new BigInteger("114514");

// 方法一
String s = a.toString(10); // 转成 10 进制下的字符串

// 方法二
String s = a + "";

1.2基本运算

1.2.1 add

1
2
3
4
5
6
7
8
9
10
BigInteger a, b;

a = new BigInteger("-114514000000");
b = new BigInteger("-114514");

cout.println(a.add(b));
cout.println(a); // a.add(b) 并不会改变 a、b 的值

cout.flush();

1.2.2 sub

1
2
3
4
5
6
7
8
9
BigInteger a, b;

a = new BigInteger("-114514114514");
b = new BigInteger("-114514");

cout.println(a.subtract(b));
cout.println(a); // a.subtract(b) 并不会改变 a、b 的值

cout.flush();

1.2.3 mul

1
2
3
4
5
6
7
8
9
10
BigInteger a, b;

a = new BigInteger("114514");
b = new BigInteger("100001");

cout.println(a.multiply(b));
cout.println(a); // a.multiply(b) 并不会改变 a、b 的值

cout.flush();

1.2.4 div(趋0取整)

1
2
3
4
5
6
7
8
9
10
BigInteger a, b;

a = new BigInteger("3");
b = new BigInteger("5");

cout.println(a.divide(b));
cout.println(a); // a.divide(b) 并不会改变 a、b 的值

cout.flush();

1.2.4 mod

1
2
3
4
5
6
7
8
9
10
BigInteger a, b;

a = new BigInteger("114514114514");
b = new BigInteger("1000000");

cout.println(a.mod(b));
cout.println(a); // a.mod(b) 并不会改变 a、b 的值

cout.flush();

1.2.5 pow

1
2
3
4
5
6
7
8
9
10
BigInteger a;

a = new BigInteger("114514");
int b = 114514;

cout.println(a.pow(b));
cout.println(a); // a.pow(b) 并不会改变 a、b 的值

cout.flush();

1.2.5 gcd

1
2
3
4
5
6
7
8
9
10
BigInteger a, b;

a = new BigInteger("114514");
b = new BigInteger("415411");

cout.println(a.gcd(b));
cout.println(a); // a.gcd(b) 并不会改变 a、b 的值

cout.flush();

1.2.6 abs

1
2
3
4
5
6
7
8
9
BigInteger a, b;

a = new BigInteger("-114514");

cout.println(a.abs());
cout.println(a); // a.abs() 并不会改变 a、b 的值

cout.flush();

1.2.7 neg

取反

1
2
3
4
5
6
7
8
9
BigInteger a, b;

a = new BigInteger("114514");

cout.println(a.negate());
cout.println(a); // a.abs() 并不会改变 a、b 的值

cout.flush();

1.2.9 compareTo

比较大小

相同为0,大正小负。

1
2
3
4
5
6
7
8
9
10
11
12
BigInteger a, b;

a = new BigInteger("114514114514");
b = new BigInteger("114514");

cout.println(a.compareTo(b));//1
cout.println(b.compareTo(a));//-1
cout.println(a.compareTo(a));//0
cout.println(a); // compareTo 并不会改变 a、b 的值

cout.flush();

2.BigDecimal

头文件:

1
import java.math.BigDecimal ;

2.1类型转换

2.1.1stringBigDecimal

1
BigDecimal a = new BigDecimal("3.141592653589793238462643383279");

2.1.2不建议 double 或者 floatBigDecimal

比如:

1
2
3
BigDecimal a = new BigDecimal(0.1);
cout.println(a);
cout.flush();

输出:

1
0.1000000000000000055511151231257827021181583404541015625

BigDecimalrString

1
2
3
4
5
BigDecimal a = new BigDecimal("3.141592653589793238462643383279000000000");
String s = a + "";
cout.println(s);
cout.flush();

2.1.3BigDecimalrString并去除末尾0

stripTrailingZeros

1
2
3
4
5
BigDecimal a = new BigDecimal("3.141592653589793238462643383279000000000");
String s = a.stripTrailingZeros() + "";
cout.println(s);
cout.flush();

输出

1
3.141592653589793238462643383279

2.1.4 四舍五入

  • setScale(int, BigDecimal.ROUND_HALF_UP)
1
2
3
4
5
BigDecimal a = new BigDecimal("3.141592653589793238462643383279000000000");
String s = a.setScale(4, BigDecimal.ROUND_HALF_UP) + "";
cout.println(s);
cout.flush();

输出

1
3.1416

2.2基本运算

2.2.1 add、sub、mul和BigIntager一样

2.2.2div

高精度除法,要设定精度长度:

1
2
3
4
5
6
7
BigDecimal a = new BigDecimal("2");
BigDecimal b = new BigDecimal("3");

// 精度到 30 位左右
cout.println(a.divide(b, 30, BigDecimal.ROUND_HALF_UP));
cout.flush();

输出:

1
0.666666666666666666666666666667
  • Title: BigInteger & BigDecimal
  • Author: Nannan
  • Created at : 2024-03-11 18:37:00
  • Updated at : 2024-09-30 20:58:04
  • Link: https://redefine.ohevan.com/2024/03/11/四、BigInteger & BigDecimal/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments