Java大數模板——加法、減法、乘法、除法、開方、求餘
阿新 • • 發佈:2019-01-07
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)); } }