当前位置:   article > 正文

Java中的Math类以及练习_任务描述本关任务:练习使用math类的常用方法。

任务描述本关任务:练习使用math类的常用方法。

目录

Math 类的常用方法:

两道算法题:


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

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


Math 类的常用方法:

  1. public class Test01 {
  2. public static void main(String[] args) {
  3. //abs绝对值
  4. System.out.println(Math.abs(-1));//1
  5. System.out.println(Math.abs(1));//1
  6. //ceil向上取整
  7. System.out.println(Math.ceil(-1.3));//-1.0
  8. System.out.println(Math.ceil(1.3));//2.0
  9. //floor向下取整
  10. System.out.println(Math.floor(-1.3));//-2.0
  11. System.out.println(Math.ceil(1.3));//1.0
  12. //round四舍五入
  13. System.out.println(Math.floor(1.3));//1
  14. System.out.println(Math.floor(1.6));//2
  15. //max 二数较大
  16. System.out.println(Math.max(1,9));//9
  17. //pow a的b次(注意一般第二个数字传递大于等于1的正整数)
  18. System.out.println(Math.pow(2,3));//8.0
  19. System.out.println(Math.pow(2, -2));//0.25
  20. //若要开2次根号
  21. System.out.println(Math.sqrt(4));//2.0
  22. //若要开3次根
  23. System.out.println(Math.cbrt(8));//2.0
  24. //random
  25. System.out.println(Math.random());//[0.0,1.0)
  26. // abs 的 Bug
  27. //已int为例,取值范围: -2147483648 ~ 2147483647
  28. System.out.println(Math.abs(-2147483648));//仍是-2147483648
  29. System.out.println(Math.abs(-2147483647));//2147483647
  30. }
  31. }

两道算法题

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

这是我们以前的做法:

改进:

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

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

再举一个例子:

可以发现同样满足。


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

  1. public class Test{
  2. public static void main (String[]args){
  3. }
  4. //验证是否是质数的方法(新方法--效率更高)
  5. public static boolean isNew(int number) {
  6. for (int i = 2; i <= Math.sqrt(number); i++) {
  7. if (number % i == 0) {
  8. return false;
  9. }
  10. }
  11. return true;
  12. }
  13. }

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

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


2.求自幂数

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

  1. public class Test02 {
  2. public static void main(String[] args) {
  3. /* 水仙花数3*/
  4. int count = 0;
  5. for (int i = 100; i < 1000; i++) {
  6. //ge
  7. int ge = i % 10;
  8. //shi
  9. int shi = i / 10 % 10;
  10. //bai
  11. int bai = i / 100 % 10;
  12. if (i == Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3)) {
  13. count++;
  14. }
  15. }
  16. System.out.println(count);//4
  17. }
  18. }

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

  1. /* 自幂数2*/
  2. int count1 = 0;
  3. for (int i = 10; i < 100; i++) {
  4. //ge
  5. int ge = i % 10;
  6. //shi
  7. int shi = i / 10 % 10;
  8. if (i == Math.pow(ge, 2) + Math.pow(shi, 2)) {
  9. count1++;
  10. }
  11. }
  12. System.out.println(count1);//0

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

  1. /* 四叶玫瑰数4*/
  2. int count2 = 0;
  3. for (int i = 1000; i < 10000; i++) {
  4. //ge
  5. int ge = i % 10;
  6. //shi
  7. int shi = i / 10 % 10;
  8. //bai
  9. int bai = i / 100 % 10;
  10. //qian
  11. int qian = i / 1000 % 10;
  12. if (i == Math.pow(ge, 4) + Math.pow(shi, 4) + Math.pow(bai, 4) + Math.pow(qian, 4)) {
  13. count2++;
  14. }
  15. }
  16. System.out.println(count2);
  17. /* 五角星数五位 */
  18. int count3 = 0;
  19. for (int i = 10000; i < 100000; i++) {
  20. //ge
  21. int ge = i % 10;
  22. //shi
  23. int shi = i / 10 % 10;
  24. //bai
  25. int bai = i / 100 % 10;
  26. //qian
  27. int qian = i / 1000 % 10;
  28. //wan
  29. int wan = i / 10000 % 10;
  30. if (i == Math.pow(ge, 5) + Math.pow(shi, 5) + Math.pow(bai, 5) + Math.pow(qian, 5)+Math.pow(wan,5)) {
  31. count3++;
  32. }
  33. }
  34. System.out.println(count3);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/550400
推荐阅读
相关标签
  

闽ICP备14008679号