最近在做题的过程中经常遇到大数的阶乘求和,所以想总结一下java中BigInteger的用法
一、BigInteger是什么?
BigInteger是java中的一种包装类,主要用于处理任意精度的整数,处理的数据比int和long大。
二、BigInteger怎么使用
BigInteger提供了基本的运算方法,(add)加、(subtract)减、(multiply)乘、(divide)除、取余等。该构造方法用于将字符串表示的整数转化为BigInteger对象,其参数表示要被转化的字符串形式的整数。如果该字符串包含非数字字符,则会引发NumberFormatException异常。
1.BigInteger对象的创建
1.使用构造器传入String类型参数初始化对象
new BigInteger(String val)
2.使用valueOf方法传入long类型参数初始化对象
BigInteger.valueOf(long val)
3.使用字符串转换的方法初始化对象
BigInteger(String val,int radix)
2.BigInteger中的参数
(1)构造方法的参数: 1.new BigInteger(String val)
该构造方法用于将字符串表示的整数转化为BigInteger对象,其参数表示要被转化的字符串形式的整数。如果该字符串包含非数字字符,则会引发NumberFormatException异常2.BigInteger(String val,int radix)
该构造方法用于将给定的字符串按照指定的进制数radix转化为BigInteger对象。其中,第一个参数val是一个字符串形式的整数,第二个参数radix是val中所使用的进制数。
(2)静态方法参数
- BigInteger.ZERO:BigInteger类的静态常量,表示值为0的BigInteger对象。
- BigInteger.ONE:BigInteger类的静态常量,表示值为1的BigInteger对象。
- BigInteger.TEN:BigInteger类的静态常量,表示值为10的BigInteger对象。
- BigInteger.valueOf(byte[] val):接受一个byte数组参数val,返回一个表示val内容的BigInteger对象。
- BigInteger.valueOf(byte[] val, int offset, int length):接受三个参数——一个byte数组参数val、一个int类型参数offset和一个int类型参数length,返回一个表示val数组中从offset位置开始、长度为length的内容的BigInteger对象。
3.BigInteger的使用案例
求S=1!+2!+....+n! 这里如果使用常规的int就不行,因为 int的范围是:-2^31——2^31-1,即-2147483648——2147483647 import java.math.BigInteger; import java.util.Scanner; public class test { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); BigInteger sum = BigInteger.ZERO; BigInteger fact = BigInteger.ONE; for (int i = 1; i <=n; i++) { fact = fact.multiply(BigInteger.valueOf(i)); sum = sum.add(fact); } System.out.println(sum); } }求斐波那契数列的案例
import java.math.BigInteger; public class f_b { public static void main(String[] args) { BigInteger a=BigInteger.ZERO; BigInteger b=BigInteger.ONE; for (int i = 1; i <=10; i++) { System.out.print(a+" "); BigInteger c=a.add(b); a=b; b=c; } } }