java 大數運算,高精度模板


轉自:https://blog.csdn.net/stffer/article/details/46382949 有修改  關於BigInteger類更詳細的用法請移步官方文檔

package practice;
import java.util.*;
import java.io.*;
import java.math.*;

import java.math.*;

public class Main {
	public static void main(String []args) {
		
		Scanner sc=new Scanner(System.in);
		BigInteger a=sc.nextBigInteger();
		BigInteger b=sc.nextBigInteger();
		int n=sc.nextInt();
		BigInteger c=BigInteger.ONE;
		BigDecimal d=sc.nextBigDecimal();
		BigInteger e=sc.nextBigInteger();
		String str=sc.nextLine();
		
		/*
		//d為int型,a,b,c都為大數  
		c=a.add(b);             //  相加  
		c=a.subtract(b);       //    相減  
		c=a.multiply(b);          // 相乘  
		c=a.divide(b);        // 相除取整  
		c=a.gcd(b);          //  最大公約數  
		c=a.remainder(b);   //  取余  
		c=a.mod(b);         // a mod b  
		c=a.abs();           // a的絕對值  
		c=a.negate();        // a的相反數  
		c=a.pow(d);           // a的b次冪        d為int型      
		c=a.max(b);           //  取a,b中較大的  
		c=a.min(b);                //  取a,b中較小的  
		d=a.compareTo(b);      //  比較a與b的大小   d=-1小於 d=0等於 d=1大於  d為int型  
		a.equals(b);            //  判斷a與b是否相等    相等返回true  不相等返回false 
		*/
		
		//加減乘除add,subtract,multiply,divide
		System.out.println(a.add(b));
		System.out.println(a.subtract(b));
		System.out.println(a.multiply(b));
		System.out.println(a.divide(b));
		
		//階乘
		//注意BigInteger.valueOf()的使用
		for(int i=1;i<=n;i++) {
			c=c.multiply(BigInteger.valueOf(i));
		}
		System.out.println(c);
		//比較大小
		int flag=a.compareTo(b);
		if(flag==-1) {
			System.out.println("a<b");
		} else if(flag==0) {
			System.out.println("a=b");
		} else {
			System.out.println("a>b");
		}
		//高精度冪
		//stripTrailingZeros():返回數值上等於此小數,但從該表示形式移除所有尾部0的BigDecimal
		//toPlainString():將BigDecimal轉換為字符串
		//stratswith("c"):判斷該字符串是不是以字符c開頭的
		//substring(st,en):返回該字符串減去下標在[st,en)的字符串
		String res=d.pow(n).stripTrailingZeros().toPlainString();
		if(res.startsWith("0")) {
			res=res.substring(0,1);
		}
		System.out.println(res);
		//大數的進制轉換
		//先將字符串轉化為10進制大數,然后將大數轉化為2進制字符串
		e=new BigInteger(str,10);
		String tmp=e.toString(2);
		/*
		 d=a.intValue();      //       將大數a轉換為 int 類型賦值給 d  
		 e=a.longValue();     //       將大數a轉換為  long 類型賦值給 e  
		 f=a.floatValue();    //       將大數a轉換為  float 類型賦值給 f  
		 g=a.doubleValue();   //       將大數a轉換為  double 類型賦值給 g  
		 s=a.toString();      //     將大數a轉換為 String 類型賦值給 s
		 a=BigInteger.valueOf(e);  // 將 e 以大數形式賦值給大數 a   e只能為long或int  
		 */
		sc.close();
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM