今天面试,笔试中遇到一个编程题,要求打印出所有的水仙花数,所谓水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
我看到这个题的第一眼觉的考的是java.lang.Math下的方法的使用。可是我当时就是想不起来用哪个方法,现在晚上回来总结一下。
虽然没有当时没有想起来使用哪一个方法,但是并不妨碍代码的实现,我当时写的代码是这样的:
for (int i = 100; i < 1000; i++) {
// 百位
int j = i / 100;
// 个位
int g = (i % 100) % 10;
// 十位
int k = (i % 100) / 10;
if (((j * j * j) + (g * g * g) + (k * k * k)) == i) {
System.out.println(i);
}
虽然最后的执行结果是正确的,但是因为没有想起来使用哪个方法计算3次幂,我觉的肯定会丢点印象分。
回来之后我查阅JDK终于知道了该使用哪个方法,就是java.lang.Math写的pow(double a,double b)方法,这个方法的作用是返回a的b次方,参数是两个double类型的参数,返回值是double。于是上面的代码可以改成下面这样:
for (int i = 100; i < 1000; i++) {
// 百位
int j = i / 100;
// 个位
int g = (i % 100) % 10;
// 十位
int k = (i % 100) / 10;
if ((Math.pow(j, 3) + Math.pow(g, 3) + Math.pow(k, 3)) == i) {
System.out.println(i);
}
}
顺便在这里复习一下Math中其他的方法,以免以后用到再忘记
方法名称 | 描述 |
---|---|
abs(double a/float a/int a/long a) | 返回值的绝对值double/float/int/long |
ceil(double a) | 返回double大于(等于负数)并且等于数学整数的最小(最接近负无穷大) 值 |
floor(double a) | 返回double小于或等于自变量且等于数学整数的最大(最接近正无穷大) 值 |
max(double a,double b/float a,float a/int a,int b/long a,long b) | 返回两个double/float/int/long值中较大者 |
min(double a,double b/float a,float a/int a,int b/long a,long b) | 返回两个double/float/int/long值中较小者 |
random() | 返回一个double带有正号(大于或等于0.0并小于)的值1.0 |
rint(double a) | 返回double值最接近自变量且等于数学整数的值 |
round(double a/float a) | 返回最接近long/float参数的参数,并舍入为正无穷大 |
网友评论