Java中的Math类以及练习

本文介绍了JavaMath类中的常用数学方法,如绝对值、向上取整、向下取整等,并提供了质数判断的改进算法,以及如何求解水仙花数、自幂数和特殊数例如四叶玫瑰数和五角星数。
摘要由CSDN通过智能技术生成

目录

Math 类的常用方法:

两道算法题:


  • 是一个帮助我们进行数学计算的工具类
  • 私有化构造方法,所有的方法都是静态的

私有化构造方法则说明 Math 类不可创建对象


Math 类的常用方法:

public class Test01 {
    public static void main(String[] args) {

    	//abs绝对值
         System.out.println(Math.abs(-1));//1
         System.out.println(Math.abs(1));//1
        
    	//ceil向上取整
    	 System.out.println(Math.ceil(-1.3));//-1.0
    	System.out.println(Math.ceil(1.3));//2.0
        
        //floor向下取整
        System.out.println(Math.floor(-1.3));//-2.0
        System.out.println(Math.ceil(1.3));//1.0
        
        //round四舍五入
        System.out.println(Math.floor(1.3));//1
    	 System.out.println(Math.floor(1.6));//2
        
        //max  二数较大
         System.out.println(Math.max(1,9));//9
        
        //pow  a的b次(注意一般第二个数字传递大于等于1的正整数)
         System.out.println(Math.pow(2,3));//8.0
        System.out.println(Math.pow(2, -2));//0.25
    	//若要开2次根号
        System.out.println(Math.sqrt(4));//2.0
        //若要开3次根
        System.out.println(Math.cbrt(8));//2.0


        
        //random
        System.out.println(Math.random());//[0.0,1.0)

   

		//   abs 的  Bug
    	//已int为例,取值范围:  -2147483648 ~ 2147483647;
    System.out.println(Math.abs(-2147483648));//仍是-2147483648
    System.out.println(Math.abs(-2147483647));//2147483647

    }
}

两道算法题:

  1. 判断一个数是否为质数:

这是我们以前的做法:

改进:

  • 原理:数字 8 可以由 1*8 或 2*4 组成,如图:
    • 而 1、2、4、8 也叫 8 的因子。

可以发现组成 8 的那两个数,一个必须小于 根 8 ,一个必须大于根 8。

再举一个例子:

可以发现同样满足。


因此根据此原理可以改进为:


public class Test{
    public static void main (String[]args){

    }
    //验证是否是质数的方法(新方法--效率更高)
    public static boolean isNew(int number) {
        for (int i = 2; i <= Math.sqrt(number); i++) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }
}

以前方式的含义是:从 2 开始到 number-1 若有能被整除的因子就不是质数。循环结束,没有则是质数

现在方式的含义是:从 2 开始到 number 开根(包含),若有能被整除的因子就不是质数。循环结束,没有则是质数


2.求自幂数

要求 1:求水仙花数----即三位自幂数

public class Test02 {
    public static void main(String[] args) {
    /*   水仙花数3位  */
    int count = 0;
    for (int i = 100; i < 1000; i++) {
        //ge
        int ge = i % 10;
        //shi
        int shi = i / 10 % 10;
        //bai
        int bai = i / 100 % 10;
        if (i == Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3)) {
            count++;
        }
    }
        System.out.println(count);//4个
    }
}

要求 2:证明没有两位的自幂数:

   /* 自幂数2位   */
        int count1 = 0;
        for (int i = 10; i < 100; i++) {
            //ge
            int ge = i % 10;
            //shi
            int shi = i / 10 % 10;
            if (i == Math.pow(ge, 2) + Math.pow(shi, 2)) {
                count1++;
            }
        }
        System.out.println(count1);//0个

要求 3:分别统计四叶玫瑰数、五角星数(答案都是 3 个)

    /*   四叶玫瑰数4位    */
        int count2 = 0;
        for (int i = 1000; i < 10000; i++) {
            //ge
            int ge = i % 10;
            //shi
            int shi = i / 10 % 10;
            //bai
            int bai = i / 100 % 10;
            //qian
            int qian = i / 1000 % 10;

            if (i == Math.pow(ge, 4) + Math.pow(shi, 4) + Math.pow(bai, 4) + Math.pow(qian, 4)) {
                count2++;
            }
        }
        System.out.println(count2);



        /*   五角星数五位   */
        int count3 = 0;
        for (int i = 10000; i < 100000; i++) {
            //ge
            int ge = i % 10;
            //shi
            int shi = i / 10 % 10;
            //bai
            int bai = i / 100 % 10;
            //qian
            int qian = i / 1000 % 10;

            //wan
            int wan = i / 10000 % 10;

            if (i == Math.pow(ge, 5) + Math.pow(shi, 5) + Math.pow(bai, 5) + Math.pow(qian, 5)+Math.pow(wan,5)) {
                count3++;
            }
        }
        System.out.println(count3);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成果、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值