黑马程序员技术交流社区

标题: 关于"水仙花数"的解答 [打印本页]

作者: 呆呆devil    时间: 2018-6-12 13:24
标题: 关于"水仙花数"的解答
我看了今年的视频,发现对比往年视频并没有水仙花数求个数的问题,但我个人觉得水仙花数这个题目还是有必要钻研一下的,这个题目能对大家对于运算符和循环的使用是有着巨大的好处,下面我来给大家发布一下在这个问题,有兴趣的同学的可以看下。
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
那么水仙数有哪些呢?



解答:开始看到这问题我也有些疑惑,按着我开始的思路假设个位为a,十位为b,百位为c,那么按我的想法a的三次方+b三次方+c三次方=水仙花数,9>a>0,9>b>0,9>c>0在用循环求出所有符合的数字。但在后面我遇到了问题for循环并不能实现我的想法,无法让a=0,b=0,c=1这样一次次逐步上升,接着我就改变了思路,下面是我之后所写的代码,有for和while两种循环方式。
求水仙花数
class Demo {
        public static void main(String[] args) {
        int d = 0;
        for (int i = 100;i <= 999 ; i++){
        int a = i % 10;
        int b = i /10 % 10;
        int c = i /10 /10 %10;
        if (i == a*a*a+b*b*b+c*c*c){
        d ++;
          }
}
        System.out.println(d);
        }
}
class Demo {
        public static void main(String[] args) {
        int x =100;
        while (x < 1000){
        int a  = x % 10;
        int b = x /10 %10;
        int c =x /10 /10 ;
        if (x == a*a*a+b*b*b+c*c*c){
        System.out.println(x);
                }
        x++;
        }
        }
}
以上代码大家可以借鉴一下,并思考下为何这样可以实现。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2