C语言的水仙花数,怎么搞?

注意要符合题目,多注释,谢谢
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1
​3
​​ +5
​3
​​ +3
​3
​​ 。 本题要求编写程序,计算所有N位水仙花数。
输入格式:

输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:

3
输出样例:

153
370
371
407

#include<stdio.h>
#include<math.h>
int main() {
int N,i,sum,n;
scanf("%d",&N);//输入
for(i=pow(10,N-1);i<pow(10,N);i++)//N是几位数,循环就从10的N-1次方至N次方,比如说N为3,那就是10的2次方(100)至10的3次方(1000)
{
sum=0;
n=i;
while(n)
{
sum+=pow(n%10,N);//计算每一位的N次方的和至sum
n=n/10;
}
if(sum==i) printf("%d\n",i);//比较和是否与原数i相等,如果相等则为水仙花数并输出
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-28

按照你的要求编写的N位水仙花数的C语言程序如下

#include<stdio.h>

#include<math.h>

int main(){

int a,d,i,b,c,N;

scanf("%d",&N);

if(N>=3 && N<=7){

for(i=(int)pow(10,N-1);i<(int)pow(10,N);i++){

b=0;

c=i;

d=N;

while(c!=0){

a=c%10;

b=b+(int)pow(a,N);

c=c/10;

}

if(b==i)

printf("%d\n",i);

}

}else{

printf("N需要3<=N<=7");

}

return 0;

}

本回答被网友采纳
第2个回答  2019-12-24
#include<stdio.h>
//递归求一个数的任意次方
int calc(int num,int count){
if(num==0){
return 0;
}else if(count==0){
return 1;
}else{
return num*calc(num,count-1);
}
}
//判断是否是水仙花数
int isSXNumber(int num){
int count=0,temp,tempA,tempB,sum=0;
temp=num;
tempB=num;
//判断这个是一个几位数
while(temp!=0){
tempA=temp%10;
count++;
temp/=10;
}
//对每一位的N次方累加
while(tempB!=0){
tempA=tempB%10;
sum+=calc(tempA,count);
tempB/=10;
}
if(sum==num){
return 1;
}else{
return 0;
}
}
void main(){
int n,i,temp;
printf("请输入一个数(3-7之间:)");
scanf("%d",&n);
while(n>7||n<3){
printf("你输入的数字不在判断范围!\n\n");
printf("请输入一个数(3-7之间:)");
scanf("%d",&n);
}
for(i=calc(10,n-1);i<=calc(10,n)-1;i++){
if(isSXNumber(i)==1){
printf("%d\n",i);
}
}
}
相似回答