java.math 包 中的 BigInteger 类(详细案例拆解)

前言:

小编打算近期更俩三期类的专栏,一些常用的专集类,给大家分好类别总结和详细的代码举例解释。

今天是第四个  java.lang.Math 包中的  BigInteger类

我们一直都是以这样的形式,让新手小白轻松理解复杂晦涩的概念,

把Java代码拆解的清清楚楚,每一步都知道他是怎么来的,

为什么用这串代码关键字,对比同类型的代码,

让大家真正看完以后融会贯通,举一反三,实践应用!!!!


①官方定义  和  大白话拆解对比

②举生活中常见贴合例子、图解辅助理解的形式

③对代码实例中关键部分进行详细拆解、总结



给小编一个赞或者关注吧,我们一起进步!!

官方语言解释

  • BigInteger 是 java.math 包中的一个类,用于表示任意精度的整数。Java 中的基本数据类型 int 及其包装类 Integer 能够存储的最大整数值为 ,long 及其包装类 Long 能存储的最大值为 。
  • 当需要表示更大的整数或者进行超出这些范围的整数运算时,基本数据类型及其包装类就无能为力了,此时就可以使用 BigInteger
  • 它提供了诸如算术运算(加、减、乘、除、求余等)、模算术、最大公约数计算、质数测试、素数生成、位操作等功能。

大白话拆解:

  • 在 Java 里,int 就像是一个能装一定数量糖果的小盒子,最多能装  颗糖果,long 是个大一点的盒子,最多装  颗糖果。
  • 但要是你有超级多糖果,这些盒子都装不下的时候,就需要 BigInteger 这个超级大的 “无限容量糖果袋” 啦。
  • 它不光能装下超级多的整数,还能对这些很大的整数进行各种计算,像加糖果、减糖果、乘糖果、除糖果等操作。

举个栗子:

import java.math.BigInteger;

public class BigIntegerAdvancedExample {

    // 方法:计算大整数的阶乘
    public static BigInteger factorial(int n) {
        BigInteger result = BigInteger.ONE;
        for (int i = 2; i <= n; i++) {
            result = result.multiply(BigInteger.valueOf(i));
        }
        return result;
    }

    // 方法:使用欧几里得算法计算两个大整数的最大公约数
    public static BigInteger gcd(BigInteger a, BigInteger b) {
        while (!b.equals(BigInteger.ZERO)) {
            BigInteger temp = b;
            b = a.mod(b);
            a = temp;
        }
        return a;
    }

    public static void main(String[] args) {
        // 计算 50 的阶乘,50 的阶乘结果是一个非常大的数,超出了 long 类型的范围
        int numForFactorial = 50;
        BigInteger factorialResult = factorial(numForFactorial);
        System.out.println(numForFactorial + " 的阶乘是: " + factorialResult);

        // 构建两个大整数
        BigInteger bigNum1 = new BigInteger("123456789012345678901234567890");
        BigInteger bigNum2 = new BigInteger("987654321098765432109876543210");

        // 计算两个大整数的最大公约数
        BigInteger gcdResult = gcd(bigNum1, bigNum2);
        System.out.println("大整数 " + bigNum1 + " 和 " + bigNum2 + " 的最大公约数是: " + gcdResult);
    }
}

代码解释和总结:

1. 计算大整数的阶乘
首先,我们有一个叫做factorial的方法,这个方法用来计算一个整数n的阶乘。阶乘的意思是,如果你选了一个正整数n,它的阶乘(通常表示为n!)就是从1乘到n的所有数字的乘积。例如,5的阶乘(5!)= 5 * 4 * 3 * 2 * 1 = 120。

在这个方法里,我们使用了BigInteger类,因为普通的整数类型(比如int或者long)在处理非常大的数时会不够用。BigInteger.ONE代表数字1,然后我们用一个循环从2开始一直到n,每次将当前的i值乘到结果上。这样,我们就得到了n的阶乘。

2. 欧几里得算法计算最大公约数
接着,我们有一个名为gcd的方法,它实现了欧几里得算法来找出两个大整数的最大公约数(Greatest Common Divisor, GCD)。最大公约数是指能同时整除这两个数的最大正整数。

这个算法的基本思想是:如果我们要找a和b(假设a > b)的最大公约数,我们可以用a除以b得到余数r,然后用b和r代替原来的a和b继续这个过程,直到余数为0。这时,b的值就是原始两个数的最大公约数。

这里也用了BigInteger类来保证可以处理非常大的数字,并且.mod()方法用来获取除法后的余数。

3. 主程序
在main方法中,我们做了两件事情:

首先,调用factorial方法计算50的阶乘并打印出来。由于50的阶乘是一个极其庞大的数字,这展示了为什么我们需要使用BigInteger而不是普通的整数类型。
然后,我们创建了两个BigInteger类型的变量bigNum1和bigNum2,它们分别代表两个很大的数。之后,我们调用gcd方法来计算这两个大数的最大公约数,并打印出结果。



我们今天就到这里,下次见吧!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值