美文网首页
Java初学上路(1)——BigInteger

Java初学上路(1)——BigInteger

作者: 木下无月 | 来源:发表于2019-10-08 10:22 被阅读0次

    最近开始学习Java,目标还是后端工程师这个岗位。之前有过Python的学习基础,这段时间也感受到了Java和Python的一些区别,也理解了这两种语言的一些优劣所在。学习过程中我也喜欢离开老师的教程,多探索一些,将自己作为新手的探索收获和遇到的坑分享出来,希望能帮到同为初学者的各位。

    每一个学习Java基础的新手,在学习for循环时,总有一道必做的的题目:

    // 1-100所有的整数之和
    public class TestSum {
        public static void main(String[] args) {
            int num = 0;
            for (int i = 0; i < 101; i += 1) {
                num += i
            }
            System.out.println("1-100所有的整数之和为:" + num);
        }
    }
    

    这是一个最基本的for循环,求和很容易。发散一下,如果我们要求1-100所有整数的乘积,做法类比于求和,用一个for循环来实现。但是简单的去模仿,虽然可以成功编译,但最终结果为0,那么来分析一下问题。
    复习学过的知识:在Java中,存储数字的基本数据类型有:int、float、long、double。
    int 为32位二进制数(4字节),能表示的数字大小为:- 2^31 ~ 2^31 - 1 ;
    long 为64位二进制数(8字节),能表示的数字大小为:-2^63 ~ 2^63 -1;
    float 为32位二进制数,能表示的数字大小为:2^-149 ~ 2^128 -1;
    double 为64位二进制数,能表示的数字大小为:2^-1074 ~ 2^1024 -1;
    粗略估计,从1到100整数相乘的乘积非常大,有可能最大范围的double类型都装不下,那么这个时候,我们可以使用java Math库中的BigInteger类。
    BigInteger理论上的取值范围可以无限大,虽然提供了加减乘除基本运算,但不是使用运算符而是调用方法去实现的。

    // 首先我们要载入Math包里的BigInteger类
    import java.Math.BigInteger;
    public class TestMultiply {
        public static void main(String[] args) {
            // 因为Java类型相同才可以运算,所以我们要将用到的数字和变量全部用BigInteger类实例化表示
            BigInteger i = new BigInteger("1");
            BigInteger j = new BigInteger("1");
            BigInteger k = new BigInteger("100");
            BigInteger num = new BigInteger("1");
            for (; i <= k; i += j) {
                // 在之前讲过,BigInteger的运算通过类方法来实现
                // a.add(b) a+b
                // a.subtract(b) a-b
                // a.multiply(b) a*b
                // a.divide(b) a/b
                num = num.multiply(i);
            }
            System.out.println("1-100之间整数的乘积为:" + num );
        }
    }
    

    在一般的学习应用过程中,我们其实很难有机会用到超出double范围的数字,但了解到有BigInteger类,再加深到对类的使用,对我们初学上路还是很有帮助。

    相关文章

      网友评论

          本文标题:Java初学上路(1)——BigInteger

          本文链接:https://www.haomeiwen.com/subject/cbpuyctx.html