水仙花数:实际上是自幂数的定义
自幂数的定义:对于一个 n位数来说:如果每个位的数字的n次幂之和等于该n位数,那么我们就称该数为自幂数。
对于3位数来说:
1
3
+
5
3
+
3
3
=
153
1^3+5^3+3^3=153
13+53+33=153这是我们常见的一个水仙花数。
因为水仙花数是自幂数的一种,因此直接判断一个数是否为自幂数即可。
原理比较简单:
- 首先判断输入的i为几位数。
- 每个位的n次幂之和是否等于i;
这里涉及到了求每个位上的数字,以3位数为例:百位,十位,个位。
下面看一下代码,如下:
#include<stdio.h>
#include<math.h>
int Is_Nt(int i)
{
int tmp = i; //临时变量tmp存储i的值,因为后面还有使用到i,不要在循环内改变i的值。
int n = 1;//最少为1位数。
int ret = 0;
//判断为几位数;123/10=12,n=2;12/10=1,n=3
while (tmp /= 10)
{
n++;
}
//三位数的话,求百位,十位,个位。
//第一次进去i%10为个位,i除以10,再取余得到它的十位,依次类推。
while (i)
{
ret = ret +(int) pow(i % 10, n);
i = i / 10;
}
return ret;
}
int main()
{
int i = 0;
for (i = 0; i < 100000; i++)
{
int ret = Is_Nt(i);
if (ret == i)
{
printf("%d为自幂数\n", i);
}
}
return 0;
}