我是靠谱客的博主 俊逸草莓,最近开发中收集的这篇文章主要介绍Java 大数类BigInteger与BigDecimal详细介绍(配蓝桥杯例题讲解),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 1.基本函数
      • 1.1 java.math.BigInteger.valueOf(long val)
    • 2.运算法则
      • 2.1 基本运算
      • 2.2 compareTo(BigInteger other)方法
      • 2.3 boolean equals();
      • 2.4 BigInteger构造函数:
        • 2.4.1 BigInteger(String val);
        • 2.4.2 BigInteger(String val,int radix);
    • 3.基本常量
    • 4.基本操作
    • 5.蓝桥杯试题
      • 5.1 题目描述
      • 5.2 考点
      • 5.3 代码实例
      • 5.4 结果
      • 5.5 代码讲解
      • 5.6 详细讲解文件输出

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.mate包中的两个很有用的类:BigInteger与BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。

1.基本函数

1.1 java.math.BigInteger.valueOf(long val)

将参数转换为制定的类型,返回一个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);
		}
	}
}

2.运算法则

2.1 基本运算

这两种数据类型不能使用人们熟悉的算术运算符(加减乘除等)而需要使用大数值中的一些方法来代替,下面进行详细讲解。

(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

2.2 compareTo(BigInteger other)方法

这是一个比较字符串的方法,如果这个大整数与一个大整数other相等,返回0;
如果这个大整数小于两个大整数other,返回负数;
否则返回正数。

2.3 boolean equals();

判断两个大整数是否相等

2.4 BigInteger构造函数:

2.4.1 BigInteger(String val);

将指定字符串转换为十进制表示形式;

2.4.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

3.基本常量

A=BigInteger.ONE 1

B=BigInteger.TEN 10

C=BigInteger.ZERO 0

4.基本操作

读入:

用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());
}

5.蓝桥杯试题

##第九届蓝桥杯第三题:复数幂

5.1 题目描述

设i为虚数单位。对于任意正整数n,(2+3i)^n 的实部和虚部都是整数。
求(2+3i)^123456 等于多少?即(2+3i)的123456次幂,这个数字很大,要求精确表示。
答案写成 “实部±虚部i” 的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面不加正号。(2+3i)^2 写成: -5+12i,
(2+3i)^5 的写成: 122-597i 注意:需要提交的是一个很庞大的复数,不要填写任何多余内容。

5.2 考点

大数类,文件输出

5.3 代码实例

import java.io.*;
import java.math.BigInteger;
 
public class Main {
 
	public static void main(String[] args) throws FileNotFoundException {
			PrintStream ps=new PrintStream(new FileOutputStream("C:\MyEclipse\file\ppp.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");
	}

5.4 结果

因为myeclipse控制台会炸的,所以要以文件的形式输出
在这里插入图片描述
一共135k的文件就对了,剩下的请读者们按照代码自己打一下

5.5 代码讲解

  1. PrintStream ps=new PrintStream(new FileOutputStream(“C:MyEclipsefileppp.txt”));
    黄色标记的部分是你想要输出到哪个文件的目录下,
  2. b.compareTo(BigInteger.ZERO)>0这句代码的意思是:b是否大于0
  3. (b.compareTo(BigInteger.ZERO)>0?"+":"")+b:如果大于零b的前面就添加一个加号,否则b的前面就为空
    如果不写这一行代码的话,当n的值等于2的时候,输出结果为:-512i而不是-5+12i
    它的作用是,当一个数是整数时要加加号

5.6 详细讲解文件输出

方法一:

这两行代码方可解决
PrintStream ps=new PrintStream(new FileOutputStream(“C:MyEclipsefilewlllrk.txt”));
System.setOut(ps); //文件输出

方法二:
1.在你想要运行的程序上右键–> Run As --> Run Configurations
在这里插入图片描述
2.选择Common窗口,设置文件保存路径,以及是否以追加方式保存console输出到文件。

在这里插入图片描述

最后

以上就是俊逸草莓为你收集整理的Java 大数类BigInteger与BigDecimal详细介绍(配蓝桥杯例题讲解)的全部内容,希望文章能够帮你解决Java 大数类BigInteger与BigDecimal详细介绍(配蓝桥杯例题讲解)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部