水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:
。本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
题目集全集传送门
#include <stdio.h>
#include <math.h>
void fun(int ar[8],int m);
int main()
{
int n,j,k,s;
int sum,min,max,m;
int a[8]={0};
scanf("%d",&n);
min = pow(10,n - 1);
max = pow(10,n)-1;
for(j = min;j <= max;j++){
if(j > 5000000&&j< 9000000||j>2000000&&j<4000000) //这一步只是为了解决n为7时PTA提示运行超时问题,这些范围电脑算过了
continue;
m = j;
fun(a,m);
sum = 0;
for(k = 1;k <= n;k++)
sum += pow(a[k],n);
if(sum == j)
printf("%d\n",j);
}
return 0;
}
void fun(int ar[8],int m)
{
int i = 1;
while(m){
ar[i] = m%10;
m = m/10;
if(m < 10)
ar[i+1] = m;
i++;
}
}