自幂数是一个n位数的数等于自身各个位数上数字的n次幂指和。
水仙花数是三位自幂数。有些题目说输入100000以内的水仙花数,答案却有四位五位的数字,但是水仙花数是三位自幂数,四位自幂数叫四叶玫瑰数,五位是五角星数,而且所有个位数都是自幂数,称为独身数。
所以求自幂数的原理与求水仙花数同理(1本来不是水仙花数,因为水仙花数是三位数),但是要做一些修改,要先判断位数,再用数学库函数pow,实现相应的次幂。
求位数这里用递归的方式,每次/10少一个位数,并让返回值加一,直到只剩个位数为止,再返回一个一。
其他不懂的可以看我写的一篇水仙花数的博客。
具体代码如图:
#include <stdio.h>
#include <math.h>
int ws(int n)
{
if (n < 10)
{
return 1;
}
if (n >= 10)
{
return 1 + ws(n / 10);
}
}
int ss(int i,int count)
{
if (i <= 9)
{
return pow(i,count);
}
else
{
return pow((i % 10),count) + ss(i / 10, count);
}
}
void flower(int n)
{
int i = 0;
for (i = 1; i <= n; i++)
{
int count = ws(i);
int h = 0;
h = ss(i, count);
if (i == h)
{
printf("%d ", i);
}
}
}
int main()
{
int n = 0;
scanf("%d", &n);
flower(n);
return 0;
}
比如输入100000,就是输入100000以内的所有自幂数。
注:pow是一个数学库函数,头文件是math.h,pow(x,y)意思就是x的y次方。