如果基本的整数和浮点数精度不能够满足需求,那么可以使用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

  1. 读入:
用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");
	}
08-09 20:38