目录
- 是一个帮助我们进行数学计算的工具类
- 私有化构造方法,所有的方法都是静态的
私有化构造方法则说明 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
}
}
两道算法题:
- 判断一个数是否为质数:
这是我们以前的做法:
改进:
- 原理:数字 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);