二十一:拓展水仙花

问题 : 拓展水仙花
题目描述

有一种数字叫:水仙花数。比如:153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。 
现在,有一种拓展的水仙花数。 
不仅仅是每位数每位数字的3次方和了,如果这个数字总共有N位的话,则是“每位数字的N次方和”。 
eg:54748=5*5*5*5*5+4*4*4*4*4+7*7*7*7*7+8*8*8*8*8+4*4*4*4*4
现在要给你一个数X。需要你给出在所有X位数中,存在的拓展水仙花数分别是什么。从小到大输出。
输入
一个数字X表示位数(x<=6)。
输出
X位数中哪些是拓展水仙花数。从小到大,每行一个
样例输入
4
样例输出
1634
8208

9474

方法一:

 1 #include<stdio.h>
 2 #define fr(i,n,m) for(i=n;i<m;i++)
 3 int fun(int n,int m){
 4     int sum=1;
 5     for(int j=0;j<n;j++){
 6         sum*=m;
 7     }
 8     return sum;
 9 }
10 int main(){
11     int n,a,b,i;
12     int k,sum,p;
13     scanf("%d",&n);
14     switch(n){
15         case 1:a=1,b=10;break;
16         case 2:a=10,b=100;break;
17         case 3:a=100,b=1000;break;
18         case 4:a=1000,b=10000;break;
19         case 5:a=10000,b=100000;break;
20         case 6:a=100000,b=1000000;break;
21     }
22     fr(i,a,b){
23         k=a;
24         p=i;
25         sum=0;
26         while(k){
27             sum+=fun(n,p/k);
28             p=p%k;
29             k=k/10;
30         }
31         if(sum==i){
32             printf("%d
",i);
33         }
34     }
35 
36 }

方法二:

 1 #include<stdio.h>
 2 #include<math.h>
 3 int fun(int n,int m){
 4     int sum=1;
 5     for(int j=0;j<n;j++){
 6         sum*=m;
 7     }
 8     return sum;
 9 }
10 int main(){
11     int a,b,n,sum,p;
12     scanf("%d",&n);
13     for(int i=pow(10,n-1);i<pow(10,n);i++){
14         a=pow(10,n-1);
15         p=i;
16         sum=0;
17         while(a){
18             sum+=fun(n,p/a);
19             p=p%a;
20             a=a/10;
21         }
22         if(sum==i){
23             printf("%d
",i);
24         }
25     }
26     
27 } 
原文地址:https://www.cnblogs.com/yuming226/p/8150870.html