Java 习题 - 查找所有水仙花数(Narcissistic Number)

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。

package com.pro.one;

public class NarcissisticNum {
    private static int count = 0;
    private static float powersEnd;
    public static void main(String[] args) {
        for (int narcissistic = 100; narcissistic < 999; narcissistic++) {
            powersEnd=0;  //注意每次重新循环的时候,接受计算结果的数都要归零,用于重新计算
            String narcissisticString = String.valueOf(narcissistic);
            //String.split(""); 将整型拆解为字符串数组
            String[] narcissisticStringSplited = narcissisticString.split(""); 
            for (int i = 0; i < narcissisticStringSplited.length; i++) {
                //floateger.parsefloat(String...); 将内容为数字的字符串转换为整型
                float narcissisticStringSplitedTofloat = Float.parseFloat(narcissisticStringSplited[i]);
                powersEnd += new NarcissisticNum().Powers(narcissisticStringSplitedTofloat, 3);
                if (powersEnd==narcissistic&&i==narcissisticStringSplited.length-1) {  //防止出现数字还没有加完就判等
                    count++;
                    System.out.println("第 "+count+" 个水仙花数(narcissistic number): "+narcissistic);
                    powersEnd = 0;
                }
            }
        }
    }
    //实现整数的n次幂
    public float Powers(float base,float pow) {
        if (pow>0) {
            return base*Powers(base, pow-1);
        }else if (pow<0) {
            return 1/(base*Powers(base, -pow-1));
        }else {
            return 1;
        }
    }
}
//Result:
第 1 个水仙花数(narcissistic number): 153
第 2 个水仙花数(narcissistic number): 370
第 3 个水仙花数(narcissistic number): 371
第 4 个水仙花数(narcissistic number): 407

你可能感兴趣的:(Java 习题 - 查找所有水仙花数(Narcissistic Number))