import java.util.Scanner;
/**
*
*/
/**
* @author Charles
*
*/
public class WaterFlowerNumber {
/**
* @param args
*/
public static void main(String[] args) {
// TODO
Scanner scanner =new Scanner(System.in); //new 控制台输入
System.out.printf("请输入水仙花数的位数: ");
int nextInt=scanner.nextInt(); //nextInt 接收输入的数字
int began=IntbeganNumberScope(nextInt); //开始范围
int end =IntendNumberScope(nextInt); //结束范围
for (int i=began;i<=end;i++) {
if(IntWaterFlowerNumber(i))
System.out.print(i+"\n");
}
}
/**
* 根据输入值生产水仙花数的开始
* @param num
* main
* @return
* 开始
*/
public static int IntbeganNumberScope(int num) {
int began=0;
began =(int) Math.pow(10, num-1); //如果输入的是3位数,开始范围就是100
return began;
}
/**
* 根据输入值生产水仙花数的结束
* @param num
* @return
* 结束
*/
public static int IntendNumberScope(int num) {
int end=0;
end = (int)Math.pow(10,num)-1; 如果输入的是3位数,开始范围就是999
return end;
}
/**
* 判断水仙花数的长度
* @param num
* IntWaterFlowerNumber
* @return
* 长度
*/
public static int printfLong(int num) {
int length =0; //水仙花数的长度
while (num>0) {
num=num/10;
length++;
}
return length;
}
/**
* 判断输入的值是否为水仙花数
* @param num
* main
* @return
* true ore false
*/
public static boolean IntWaterFlowerNumber(int num) {
int length=printfLong(num); //水仙花数的长度
int n=num; //把num 值赋值给n ,让n代替num参与运算
int number=0; //累计num的余数相加
while(n>0) {
number +=(int)(Math.pow(n%10, length)); //如果传入的值是145,水仙花数的长度是3
n/=10; //5*3+4*3+1*3
}
if(number==num)
return true; //5*3+4*3+1*3==145返回true
return false; //5*3+4*3+1*3!=145返回false
}
}
输出