1. 程式人生 > >Java大數模板——加法、減法、乘法、除法、開方、求餘

Java大數模板——加法、減法、乘法、除法、開方、求餘

1、BigInteger的運算

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
//		String num1 = "999999999999999999999999999999";
//		String num2 = "999999999999999999999999999998";
//		BigInteger big1 = new BigInteger(num1);
//		BigInteger big2 = new BigInteger(num2);
		Scanner sc=new Scanner(System.in);
		BigInteger big1=sc.nextBigInteger();
		BigInteger big2=sc.nextBigInteger();
		System.out.println("加法操作:" + big1.add(big2));
		System.out.println("減法操作:" + big1.subtract(big2));
		System.out.println("乘法操作:" + big1.multiply(big2));
		BigInteger result[] = big1.divideAndRemainder(big2);
		System.out.println("相除後的商是:" + result[0]);
		System.out.println("相除後的餘數是:" + result[1]);
	}

}

2、BigDecimal的運算

import java.math.BigDecimal;

public class Main {
	/*
	 * ROUND_HALF_UP: 遇到.5的情況時往上近似,例: 1.5 ->2 ; ROUND_HALF_DOWN:
	 * 遇到.5的情況時往下近似,例:1.5 ->;1
	 */
	public static BigDecimal add(String num1, String num2) {// 加法
		BigDecimal big1 = new BigDecimal(num1);
		BigDecimal big2 = new BigDecimal(num2);
		return big1.add(big2);
	}

	public static BigDecimal sub(String num1, String num2) {// 減法
		BigDecimal big1 = new BigDecimal(num1);
		BigDecimal big2 = new BigDecimal(num2);
		return big1.subtract(big2);
	}

	public static BigDecimal mul(String num1, String num2) {// 乘法
		BigDecimal big1 = new BigDecimal(num1);
		BigDecimal big2 = new BigDecimal(num2);
		return big1.multiply(big2);
	}

	public static BigDecimal round(BigDecimal num, int scale) {// 四捨五入,保留scale位小數
		return num.setScale(scale, BigDecimal.ROUND_HALF_DOWN);
	}

	public static BigDecimal div(String num1, String num2, int scale) {// 除法,保留scale位小數
		BigDecimal bd1 = new BigDecimal(num1);
		BigDecimal bd2 = new BigDecimal(num2);
		return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP);
	}

	public static int compare(String num1, String num2){//-1小於,0等於,1大於
		BigDecimal bd1 = new BigDecimal(num1);
		BigDecimal bd2 = new BigDecimal(num2);
		return bd1.compareTo(bd2);
	}
	public static BigDecimal sqrt(BigDecimal a) {//開方

		BigDecimal l = BigDecimal.ZERO, r = a, mid = a;
		BigDecimal two = new BigDecimal("2");
		BigDecimal eps = new BigDecimal(1e-120);
		while (l.compareTo(r.subtract(eps)) == -1) 
		{
			mid = l.add(r).divide(two);
			if (mid.multiply(mid).compareTo(a) == 1) 
			{
				r = mid;
			} 
			else
			{
				l = mid;
			}
		}
		return mid;
	}

	public static void main(String[] args) {
		String num1 = "12345.6789";
		String num2 = "3333.23443";
		String num3 = "123456";
		BigDecimal a = new BigDecimal(num3);
		System.out.println("加法操作:" + round(add(num1, num2), 2));
		System.out.println("減法操作:" + round(sub(num1, num2), 2));
		System.out.println("乘法操作:" + round(mul(num1, num2), 2));
		System.out.println("除法操作:" + div(num1, num2, 2));
		System.out.println("開方操作:" + sqrt(a));
		System.out.println("比較操作:" + compare(num1, num2));
	}

}