输入任意数位,求水仙花数?
输入任意数位,求水仙花数?

程序代码:#include<stdio.h>
#include <math.h>
int getNarNum(int n);
int main(void)
{
int n;
int i;
int count = 0;
printf("输入水仙花位数:");
scanf("%d", &n);
if (n < 3)
{
printf("输入错误!");
return 0;
}
for (i = 3; i <= n; i++) //如果只求当前位数的水仙花数,那么不用循环,直接调用就行。这里求的是3位到n位所有的水仙花个数
{
count += getNarNum(i);
}
printf("%d位及以下水仙花有%d个\n",n,count);
return 0;
}
int getNarNum(int n)
{
int i = 0;
int count = 0;
int num = 0;
int sum = 0;
int single = 0;
for (i = (int)pow(10, n-1); i < (int)pow(10, n); i++)
{
single = i % 10;
num = i/10;
sum = 0;
while(1)
{
sum += (int)pow(single, n);
if (num == 0)
{
break;
}
single = num % 10;
num /= 10;
}
if (sum == i)
{
count++;
}
}
return count;
}

