如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.mate包中的两个很有用的类:BigInteger与BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。
将参数转换为制定的类型,返回一个BigInteger,其值等于指定long。这种“静态工厂方法”优先于(long)构造函数提供的,因为它允许为经常使用的BigIntegers重用。
比如
int a=3;
BigInteger b=BigInteger.valueOf(a);
则b=3;
String s="12345";
BigInteger c=BigInteger.valueOf(s);
则c=12345;
还可以使用BigInteger.valueOf(long val)计算n的阶乘
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner scan=new Scanner(System.in);
while(scan.hasNext())
{
int n=scan.nextInt();
BigInteger ans=BigInteger.valueOf(1);
for(int i=1;i<=n;i++)
ans=ans.multiply(BigInteger.valueOf(i));//ans.multiply或者ans.add必须赋值给ans,不能直接写ans.multiply!只是一个值
System.out.println(ans);
}
}
}
这两种数据类型不能使用人们熟悉的算术运算符(加减乘除等)而需要使用大数值中的一些方法来代替,下面进行详细讲解。
(1).add(); 大整数相加
(2).subtract(); 相减
(3).multiply(); 相乘
(4).divide(); 相除取整
(5).remainder(); 取余
(6).pow(); a.pow(b)=a^b
(7).gcd(); 最大公约数
(8).abs(); 绝对值
(9).negate(); 取反数
(10).mod(); a.mod(b)=a%b=a.remainder(b);
(11).max();
(12).min();
举一个简单的小栗子,其他的请读者自行练习
public static void main(String args[]) {
BigInteger a=new BigInteger("23");
BigInteger b=new BigInteger("34");
System.out.println(a.add(b));
}
程序输出为:57
这是一个比较字符串的方法,如果这个大整数与一个大整数other相等,返回0;
如果这个大整数小于两个大整数other,返回负数;
否则返回正数。
判断两个大整数是否相等
(1) BigInteger(String val);
将指定字符串转换为十进制表示形式;
(2) BigInteger(String val,int radix);
将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger
第一个参数是一个数字字符串,第二个参数是几进制,栗子如下:
System.out.println(new BigInteger("110", 2));
System.out.println(new BigInteger("110", 8));
System.out.println(new BigInteger("110", 10));
System.out.println(new BigInteger("1e2c3d", 16));
结果:
6
72
110
1977405
A=BigInteger.ONE 1
B=BigInteger.TEN 10
C=BigInteger.ZERO 0
- 读入:
用Scanner类定义对象进行控制台读入,Scanner类在java.util.*包中
Scanner cin=new Scanner(System.in);// 读入
while(cin.hasNext())
{
int n;
BigInteger m;
n=cin.nextInt(); //读入一个int;
m=cin.BigInteger();//读入一个BigInteger;
System.out.print(m.toString());
}
第九届蓝桥杯第三题:复数幂
题目如下:
考点:
大数类,文件输出
代码实例:
import java.io.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
PrintStream ps=new PrintStream(new FileOutputStream("work.txt"));
System.setOut(ps); //文件输出
int n=123456;
BigInteger a=new BigInteger("2");
BigInteger b=new BigInteger("3");
BigInteger a1=new BigInteger("2");
BigInteger b1=new BigInteger("3");
for(int i=1;i<n;i++) {
BigInteger ta=a;
a=a.multiply(a1).subtract(b.multiply(b1));//a=a*a1-b*b1;
b=ta.multiply(b1).add(b.multiply(a1));//b=a*b1+b*a1
}
System.out.println(a+(b.compareTo(BigInteger.ZERO)>0?"+":"")+b+"i");
}