水仙花数
/**
水仙花数
一个数的每位数的N次方的和等于这个数就是水仙花数
1、获取一个数
2、判断是不是水仙花
*/
//键盘输入
import java.util.Scanner;
public class Work02{
//声明一个main方法
public static void main(String[] args){
//1 先获取一个正整数
//int num = getNum();
//2、检测是否是水仙花数
//循环一定区间内的水仙花数 并打印
//获取开始时间
long startTinme = System.nanoTime();
for(int i = 100;i<=1000000;i++){
if(isFlower(i)){
System.out.print(i+",");
}
}
//获取结束时间
long endTime = System.nanoTime();
System.out.println("\n"+"程序运行时间:"+(endTime-startTinme)+"ns");
}
/**
判断是不是水仙花
*/
public static boolean isFlower(int num){
//先判断这个数是不是大于100
if(num<100){
return false;
}
//到这的数都是超过100的,判断num每位数对应N次方的总和是不是等于num
return num == powSum(num);
}
/**
计算整数的位数
*/
public static int length(int num){
//声明一个变量 初始化是0位数
int length =0;
//判断num/10不等于0,来确认num的位数
while(num!=0){
num /= 10;
length++;
}
return length;
}
/**
返回键盘输入的值
*/
public static int getNum(){
//键盘输入
Scanner scan = new Scanner(System.in);
//交互
System.out.print("请输入一个正整数:");
//声明一个变量来接收
int num = scan.nextInt();
return num;
}
/**
计算某数的N次方
*/
public static int pow(int num,int length){
//先声明一个变量来存储最终的和
int result = 1;
//知道乘几次 用for循环
for(int i = 1;i<=length;i++){
result = result*num;
}
return result;
}
/**
计算这个数每位的N次方的和
先确认数的长度 来决定每位数要乘几次
然后定义一个变量来存储
*/
public static int powSum(int num){
//先确认数的长度
int count = length(num);
//声明一个变量来存总和
int sum = 0;
//每次提取一位数 只要这个数不等于0就一直循环 用while
while(num!=0){
int i = num%10;
sum = sum + pow(i,count);
num /= 10;
}
return sum;
}
}