#include <stdio.h>
#include<math.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
int narcissistic( int number )
{
int num1,num2,sum=0,i,j=0;
num1=number;
num2=number;
while(number>0)
{
number/=10;
j++;
}
while(num1>0)
{
i=num1%10;
sum+=pow(i,j);
num1/=10;
}
if(num2==sum) return 1;
else return 0;
}
void PrintN( int m, int n )
{
int i;
for(i=m+1;i<n;i++)
{
if(1==narcissistic(i))
printf("%d\n",i);
}
}
水仙数每个位上的数字的N次幂之和等于它本身,所以我们需要判断它的位数,用while循环可以较方便的实现。接着我们需要求它每一位N次幂的和。因为(a/10^n)%10就是它n位数上的值,知道这一点就可以很容易的求出了。然后用幂之和与原数比较,就可以判断是否是水仙数了。本题需要注意头文件,毕竟pta上本题是没有<math.h>的。如果你不是要在pta上交题,推荐不要这么写。