JAVA高精度模板

刚开始还坚持用C++写高精来着,后来发现JAVA写高精方便太多了,所以也来学习一下JAVA高精度的模板。

参考:https://www.cnblogs.com/imzscilovecode/p/8833230.html

     https://blog.csdn.net/qq_41428565/article/details/80211938

1. valueOf(parament); 将参数转换为制定的类型

比如 int a=3;

BigInteger b=BigInteger.valueOf(a);
则b=3;
String s=”12345”;
BigInteger c=BigInteger.valueOf(s);

则c=12345;

2. BigInteger构造函数:
一般用到以下两种:
BigInteger(String val);
将指定字符串转换为十进制表示形式;
BigInteger(String val,int radix);
将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger

3. 基本常量:

A=BigInteger.ONE 1

B=BigInteger.TEN 10

C=BigInteger.ZERO 0

import java.util.*;
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();
        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");
        }
        //大数的进制转换
        //先将字符串转化为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();
    }
}

 

posted @ 2019-03-22 09:51  Frank__Chen  阅读(183)  评论(0编辑  收藏  举报