1.什么是水仙花数?什么是自幂数?
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
原始题目:求出0~100000之间的所有“水仙花数”并输出
2.思路
1)先计算一个数的位数。
2)幂函数,也可以使用标准库的pow函数。
3)求和判断。
3.代码
//求出0~100000之间的所有“水仙花数”并输出
#include<stdio.h>
double my_pow(double n, int k) //指数函数
{
if (1 == k)
{
return n;
}
return n * my_pow(n, k - 1);
}
int is_Narcissistic_Number(const int x)
{
//计算是几位数
int y = x;
int n = 0;
while (y)
{
y /= 10;
n++;
}
y = x;
//求和
int res = 0;
for (int i = 0; i < n; i++)
{
res += my_pow((y % 10), n);
y /= 10;
}
//判断是否相等
if (res == x)
{
return 1;
}
return 0;
}
int main()
{
for (int i = 0;i <= 100000;i++)
{
if (is_Narcissistic_Number(i))
printf("%d ", i);
}
printf("\n");
return 0;
}