用java求水仙花數最經典的程式碼
每一位的該數位數次方之後等於該數,那麼該數為水仙花數
如:153=1的3次方+5的3次方+3的3次方,注意:這裡位數不確定,需要動態的獲取。
思路分析:
a)輸入n在101到99999的數字-》利用迴圈
b)找出100到n的所有數字-》利用迴圈
c)判斷當前的數字是否是水仙花數
1)由153=1的3次方+5的3次方+3的3次方 分析,153就是判斷數字,可以直接獲取到
2)3次方——》數的位數
3) 1,3,5——》數的每一位數字
4) 1的3次方-->數的次方
5) 1的3次方+5的3次方+3的3次方---》累加求和
6)求和之後與數字153比較即可判斷
import java.util.Scanner;
public class Test7{
public static void main(String args[]){
demo();
}
public static void demo(){
int n=inputInt2(101,99999);
for(int num=101;num<=n;num++){
if(isFlowerNum(num)){
System.out.println(num);
}
}
}
public static boolean isFlowerNum(int num){
int oldNum=num;
int ws=weishu(num);
int cfNum=0;
while(true){
int gw=num%10;
int cf=ciFang(gw,ws);
cfNum+=cf;
num/=10;
if(num==0){
break;
}
}
if(oldNum==cfNum){
return true;
}
return false;
}
public static int ciFang(int num1,int num2){
int sum=1;
for(int i=0;i<num2;i++){
sum*=num1;
}
return sum;
}
public static int weishu(int num){
int count=0;
do{
num/=10;
count++;
}while(num!=0);
return count;
}
public static int inputInt2(int min,int max){
int in=inputInt();
while(true){
if(in>=min&&in<=max){
return in;
}
}
}
public static int inputInt(){
Scanner sc=new Scanner(System.in);
System.out.println("請輸入一個數:");
int in=sc.nextInt();
return in;
}
}