Java初学上路(1)——BigInteger

最近开始学习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)