JavaBigIteger练习(1) (2024.7.22)

        BigItegerExercise1

package BigIntegerExercise20240722;
import java.math.BigInteger;
import java.util.Random;
import java.util.Scanner;


public class BigIntegerExercise {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 为什么引入BigInteger?
        // int类型不够大,long也不够大,引入BigInteger类,理论最大值42亿的21亿次方,理论无限大

        // BigInteger的构造方法
        // public BigInteger(int num, Random rnd) 		//获取随机大整数,范围:[0 ~ 2的num次方-1]
        // public BigInteger(String val) 				//获取指定的大整数
        // public BigInteger(String val, int radix) 	//获取指定进制的大整数

        // 1.获得随机大整数
//        int i = 10;
//        for (int j = 0; j < i; j++) {
//            BigInteger bi1 = new BigInteger(10, new Random()); // 生成随机大整数(0-2的10次方-1(0-1023))
//            System.out.println(bi1);
//        }
//
//        // 2.获得指定的大整数
//        System.out.println("你想获得什么大整数?");
//        String big = sc.nextLine();
//        BigInteger bigNumber = new BigInteger(big);
//        System.out.println("BigInteger对象是:" + bigNumber);
//
//        // 3.获取指定进制的大整数
//        BigInteger bigint = new BigInteger("11100111000", 2);
//        // 传递两个参数,第一个是字符串类型的数字,第二个参数是进制,注意第一个参数不能超越进制--->(110, 2)就是在2进制下的110,也就是6 ,返回的也是6
//        System.out.println(bigint); // 返回的是10进制的数字

          // 4.可以通过静态方法获得BigInteger对象,不是构造方法!
          // public static BigInteger valueOf(long val)  静态方法获取BigInteger的对象,内部有优化
        BigInteger bigInteger = BigInteger.valueOf(5);
        System.out.println(bigInteger);
        // 参数是long类型的整数,如果想要一个没有超过long类型的BigInteger对象,建议使用valueOf静态方法
        // 如果超过long类型的取值,那么通过构造方法创建BigInteger对象,传递字符串,理论无限大!


        // 细节:BigInteger对象一旦创建,内部的值是不会改变的,参与计算实际上是产生了一个新的BigInteger对象





    }
}

         BigItegerExercise2

package BigIntegerExercise20240722;
import java.math.BigInteger;
public class BigIntegerExercise2 {
    public static void main(String[] args) {
        // BigInteger中使用得多的方法还是四则运算,因为引用数据类型无法直接通过运算符计算,所以说提供了其对应方法
        // 但是必须注意的细节:BigInteger对象一旦创建,内部的值是不会改变的,参与计算实际上是产生了一个新的BigInteger对象

//        public BigInteger add(BigInteger val)					 //加法
//        public BigInteger subtract(BigInteger val)			 //减法
//        public BigInteger multiply(BigInteger val)			 //乘法
//        public BigInteger divide(BigInteger val)				 //除法
//        public BigInteger[] divideAndRemainder(BigInteger val) //除法,获取商和余数
//        public  boolean equals(Object x) 					     //比较是否相同
//        public  BigInteger pow(int exponent) 					 //次幂、次方
//        public  BigInteger max/min(BigInteger val) 			 //返回较大值/较小值
//        public  int intValue(BigInteger val) 					 //转为int类型整数,超出范围数据有误
        // 从方法定义中也可以看到,方法是有BigInteger返回值的,所以说是产生了一个新的BigInteger对象

//        // 1.add(+)
//        BigInteger bigInteger1 = BigInteger.valueOf(123456);
//        BigInteger bigInteger2 = BigInteger.valueOf(456789);
//        System.out.println(bigInteger1.add(bigInteger2)); // add方法产生了一个新的BigInteger对象返回两个对象的和
//        System.out.println(bigInteger1); // 可见两个BigInteger对象的值没有发生任何改变
//        System.out.println(bigInteger2);
//        System.out.println("------------------------------------------");
//
//        // 2.subtract(-)
//        BigInteger bigInteger3 = BigInteger.valueOf(91);
//        BigInteger bigInteger4 = BigInteger.valueOf(90);
//        System.out.println(bigInteger3.subtract(bigInteger4)); // subtract方法是调用者减参数,并创建新的对象返回
//        System.out.println(bigInteger3); // 原来的对象是没有改变的
//        System.out.println(bigInteger4);
//        System.out.println("------------------------------------------");
//
//        // 3.multiply(*)
//        BigInteger bigInteger5 = BigInteger.valueOf(5);
//        BigInteger bigInteger6 = BigInteger.valueOf(8);
//        System.out.println(bigInteger5.multiply(bigInteger6)); // 乘法和上面同理
//        System.out.println(bigInteger5);
//        System.out.println(bigInteger6);
//        System.out.println("------------------------------------------");
//
//        // 4.divide(/)
//        BigInteger bigInteger7 = BigInteger.valueOf(8);
//        BigInteger bigInteger8 = BigInteger.valueOf(5);
//        System.out.println(bigInteger7.divide(bigInteger8)); // 除法是调用者除参数,和减法的顺序一样
//        System.out.println(bigInteger7); // 假如无法除尽,则会舍去小数部分,向下取整
//        System.out.println(bigInteger8);

//        // 5.divideAndRemainder(除法,获得商和余数),会返回一个BigInteger数组,数组里面只有两个元素分别是商和余数
//        BigInteger bigInteger1 = BigInteger.valueOf(8);
//        BigInteger bigInteger2 = BigInteger.valueOf(5);
//        BigInteger[] array = bigInteger1.divideAndRemainder(bigInteger2);
//        for (BigInteger result : array) {
//            System.out.println(result); // 前一个BigInteger是商:1;后一个BigInteger是余数:3
//        }

         // 1.equals 方法比较两个BigInteger是否相同
        BigInteger bigInteger1 = BigInteger.valueOf(8);
        BigInteger bigInteger2 = BigInteger.valueOf(8);
        System.out.println(bigInteger1.equals(bigInteger2)); // BigInteger已经重写好了equals方法,比的不是地址值而是实际值
        System.out.println("------------------------------------------");

        // 2.pow 返回次幂
        BigInteger bigInteger3 = BigInteger.valueOf(2);
        System.out.println(bigInteger3.pow(10)); // 返回调用者的参数次幂,参数是int
        System.out.println(bigInteger3); // 调用者是没有改变的,可见是创建的新的对象返回
        System.out.println("------------------------------------------");

        // 3.max\min 返回两个BigInteger的较大值\较小值
        BigInteger bigInteger4 = BigInteger.valueOf(10);
        BigInteger bigInteger5 = BigInteger.valueOf(15);
        System.out.println(bigInteger4.max(bigInteger5)); // 返回调用者和参数二者的较大值:15
        System.out.println(bigInteger4.min(bigInteger5)); // 返回调用者和参数二者的较小值:10
        System.out.println("------------------------------------------");

        // 4.intValue 将BigInteger转换为int类型的整数并返回,注意:超出int范围的数据有误
        BigInteger bigInteger6 = BigInteger.valueOf(123456); // 创建一个不超过int类型的BigInteger对象
        int result1 = bigInteger6.intValue();
        System.out.println(result1); // 没有问题,成功从BigInteger转换为int
        BigInteger bigInteger7 = BigInteger.valueOf(1456465444456456L); // 创建一个超过int类型的BigInteger对象
        int result2 = bigInteger7.intValue();
        System.out.println(result2); // 产生错误,输出-915290104
        // 可以用JDK8之后的新方法intValueExact,如果超过了int类型,会抛出异常,从而在编译阶段就可以发现错误,而不是在运行阶段


    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值