概述
文章目录
- 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 代码讲解
- PrintStream ps=new PrintStream(new FileOutputStream(“C:MyEclipsefileppp.txt”));
黄色标记的部分是你想要输出到哪个文件的目录下, - b.compareTo(BigInteger.ZERO)>0这句代码的意思是:b是否大于0
- (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详细介绍(配蓝桥杯例题讲解)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复