美文网首页
打印水仙花数

打印水仙花数

作者: 明月几何8 | 来源:发表于2020-05-25 20:22 被阅读0次

    今天面试,笔试中遇到一个编程题,要求打印出所有的水仙花数,所谓水仙花数是指一个 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参数的参数,并舍入为正无穷大

    相关文章

      网友评论

          本文标题:打印水仙花数

          本文链接:https://www.haomeiwen.com/subject/ixeuahtx.html