Java 大数类BigInteger与BigDecimal详细介绍(配蓝桥杯例题讲解)
文章目錄
- 1.基本函數(shù)
- 1.1 java.math.BigInteger.valueOf(long val)
- 2.運算法則
- 2.1 基本運算
- 2.2 compareTo(BigInteger other)方法
- 2.3 boolean equals();
- 2.4 BigInteger構(gòu)造函數(shù):
- 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 結(jié)果
- 5.5 代碼講解
- 5.6 詳細講解文件輸出
如果基本的整數(shù)和浮點數(shù)精度不能夠滿足需求,那么可以使用java.mate包中的兩個很有用的類:BigInteger與BigDecimal。這兩個類可以處理包含任意長度數(shù)字序列的數(shù)值。BigInteger類實現(xiàn)了任意精度的整數(shù)運算,BigDecimal實現(xiàn)了任意精度的浮點數(shù)運算。
1.基本函數(shù)
1.1 java.math.BigInteger.valueOf(long val)
將參數(shù)轉(zhuǎn)換為制定的類型,返回一個BigInteger,其值等于指定long。這種“靜態(tài)工廠方法”優(yōu)先于(long)構(gòu)造函數(shù)提供的,因為它允許為經(jīng)常使用的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 基本運算
這兩種數(shù)據(jù)類型不能使用人們熟悉的算術(shù)運算符(加減乘除等)而需要使用大數(shù)值中的一些方法來代替,下面進行詳細講解。
(1).add(); 大整數(shù)相加
(2).subtract(); 相減
(3).multiply(); 相乘
(4).divide(); 相除取整
(5).remainder(); 取余
(6).pow(); a.pow(b)=a^b
(7).gcd(); 最大公約數(shù)
(8).abs(); 絕對值
(9).negate(); 取反數(shù)
(10).mod(); a.mod(b)=a%b=a.remainder(b);
(11).max();
(12).min();
舉一個簡單的小栗子,其他的請讀者自行練習(xí)
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)方法
這是一個比較字符串的方法,如果這個大整數(shù)與一個大整數(shù)other相等,返回0;
如果這個大整數(shù)小于兩個大整數(shù)other,返回負(fù)數(shù);
否則返回正數(shù)。
2.3 boolean equals();
判斷兩個大整數(shù)是否相等
2.4 BigInteger構(gòu)造函數(shù):
2.4.1 BigInteger(String val);
將指定字符串轉(zhuǎn)換為十進制表示形式;
2.4.2 BigInteger(String val,int radix);
將指定基數(shù)的 BigInteger 的字符串表示形式轉(zhuǎn)換為 BigInteger
第一個參數(shù)是一個數(shù)字字符串,第二個參數(shù)是幾進制,栗子如下:
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));結(jié)果:
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.藍橋杯試題
##第九屆藍橋杯第三題:復(fù)數(shù)冪
5.1 題目描述
設(shè)i為虛數(shù)單位。對于任意正整數(shù)n,(2+3i)^n 的實部和虛部都是整數(shù)。
求(2+3i)^123456 等于多少?即(2+3i)的123456次冪,這個數(shù)字很大,要求精確表示。
答案寫成 “實部±虛部i” 的形式,實部和虛部都是整數(shù)(不能用科學(xué)計數(shù)法表示),中間任何地方都不加空格,實部為正時前面不加正號。(2+3i)^2 寫成: -5+12i,
(2+3i)^5 的寫成: 122-597i 注意:需要提交的是一個很龐大的復(fù)數(shù),不要填寫任何多余內(nèi)容。
5.2 考點
大數(shù)類,文件輸出
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 結(jié)果
因為myeclipse控制臺會炸的,所以要以文件的形式輸出
一共135k的文件就對了,剩下的請讀者們按照代碼自己打一下
5.5 代碼講解
黃色標(biāo)記的部分是你想要輸出到哪個文件的目錄下,
如果不寫這一行代碼的話,當(dāng)n的值等于2的時候,輸出結(jié)果為:-512i而不是-5+12i
它的作用是,當(dāng)一個數(shù)是整數(shù)時要加加號
5.6 詳細講解文件輸出
方法一:
這兩行代碼方可解決
PrintStream ps=new PrintStream(new FileOutputStream(“C:\MyEclipse\file\wlllrk.txt”));
System.setOut(ps); //文件輸出
方法二:
1.在你想要運行的程序上右鍵–> Run As --> Run Configurations
2.選擇Common窗口,設(shè)置文件保存路徑,以及是否以追加方式保存console輸出到文件。
總結(jié)
以上是生活随笔為你收集整理的Java 大数类BigInteger与BigDecimal详细介绍(配蓝桥杯例题讲解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第九届蓝桥杯java B组—第二题方格计
- 下一篇: Android --- android.