Java中的Math类以及练习

目录

Math 类的常用方法:

两道算法题:


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

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

Java中的Math类以及练习_第1张图片


Math 类的常用方法:

Java中的Math类以及练习_第2张图片

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. 判断一个数是否为质数:

这是我们以前的做法:

Java中的Math类以及练习_第3张图片

改进:

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

Java中的Math类以及练习_第4张图片

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

再举一个例子:

Java中的Math类以及练习_第5张图片

可以发现同样满足。


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


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:求水仙花数----即三位自幂数

Java中的Math类以及练习_第6张图片

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);

你可能感兴趣的:(java,开发语言)