• Java大数 -- BigInteger类


    一、大数: BigInteger类

            在java语言中,每一种整数类型都有自己的上限和下限,如果要想对非常大的整数做运算,就需要使用BigInteger类。特别在做算法题传入一个数值型的字符串时。

    1.包

    import java.math.*;

    2.构造方法

    public BigInteger(String str){...}

    BigInteger bigInteger = new BigInteger(String str);

    3.常用方法

    因为BigInteger所创建的是对象,所以不能使用传统的加减乘除。要调用对应方法。

                加法                           add(BigInteger val)
                减法                         subtract(BigInteger val)
                乘法                         multiply(BigInteger val)
                除法                           divide(BigInteger val)
                求余                divideAndRemainder(BigInteger val)

    特别的,求余会返回一个大数数组,数组0索引位置是除数,1索引位置是余数。

    并且大数之间比较大小只能用equals。

    并且运算时,不能强转类型,只能在大数之间运算。 非大数类型是不能和大数操作的,只能再new一个,且new后的括号中不能为空。

     

    4.比较

    比较用compareTo(),用于两个大数之间。假设A,B是两个大数对象。

    A.compareTo(B)>0;  说明 A>B

    A.compareTo(B)==0;   说明 A=B

    A.compareTo(B)<0;     说明 A

    5.转为字符串打印输出

    6.将大数转换为基本数据类型

     

    例如这样一道进制转换题:十进制数有30位,对于java语言来说,int,long 都超出范围了。只能用大数。

    1. import java.util.Scanner;
    2. import java.math.*;
    3. public class Main {
    4. public static BigInteger b = new BigInteger("2"); //除数2 弄成成员变量
    5. public static BigInteger zeros = new BigInteger("0"); //递归结束判断
    6. public static StringBuffer sb = new StringBuffer(); //可变字符串
    7. public static void main(String[] args) {
    8. Scanner in = new Scanner(System.in);
    9. while (in.hasNext()) {
    10. sb.setLength(0); //由于sb是成员变量不是局部变量,所以每次计算都要清空
    11. BigInteger a = in.nextBigInteger();
    12. if(a.equals(zeros)) { //大数之间比较要用equals
    13. System.out.print(0);
    14. }
    15. System.out.println(exchange(a).toString());
    16. }
    17. }
    18. public static StringBuffer exchange(BigInteger a) {
    19. if(a.equals(zeros)) return sb;
    20. exchange(a.divide(b));
    21. BigInteger[] tmp = a.divideAndRemainder(b);//大数求余会返回一个数组
    22. //0索引是除数,1索引是余数
    23. sb.append(tmp[1].toString());
    24. return sb;
    25. }
    26. }

    二、小数: BigDecimal类

    和大数基本一样,优点是可以对有小数点的数进行操作。其加减乘除和比较与大数方法一样,参考大数。

    创建 :BigDecimal big = new BigDecimal(String str);

  • 相关阅读:
    久贺谷亮《高效休息法》读书笔记
    前k个高频元素
    Ubuntu安装c/c++编译环境
    分布式锁的实现- zookeeper
    软件项目管理(第二版 宁涛)问答题(个人背诵)
    零基础Web安全学习笔记
    HTML期末作业课程设计期末大作业——我的美丽家乡湛江 海鲜之都HTML+CSS+JavaScript...
    Jmeter分布式压测 —— 易踩坑点
    HTML5期末大作业:游戏网站设计与实现——基于bootstrap响应式游戏资讯网站制作HTML+CSS+JavaScript
    【考研英语】2011 年英语(一)排序题思路复盘(费曼学习法)
  • 原文地址:https://blog.csdn.net/m0_73381672/article/details/133365757