自幂数,是指一个n位数,它的每个位上的数字的 n 次幂之和等于它本身,当n为3时,称为水仙花数。
C语言代码实现:
//方法一:
#include<stdio.h>
#include<math.h>
int main( )
{
for (int num = 100; num < 1000; num++)
{
int count = 0;//创建一个int变量用来存放每一位的数字
int sum = 0;
int temp = 0;//创建一个变量用来临时存放num的值,代替num完成下面的循环运算
temp = num;
//用一个三次循环分别分解出三位数每一位上的数字
for (int i = 100; i >0; i =i/ 10)
{
count = temp/ i;
temp= temp % i;
sum += pow(count, 3);//求三个数的立方和
}
//如果这个三位数和其各位立方和相等,那么这个三位数就是一个水仙花数
if (num==sum)
printf("%d\n", num);
}
return 0;
}
//这个方法较为繁琐笨重,使用了两个for循环,时间复杂度高,简单方法请看下面的方法二。
//方法二
#include<stdio.h>
int main()
{
int i, j, k, num;
for (num = 100; num < 1000; num++)
{
i = num / 100;//求出三位数的百位上的数字
j = num / 10 % 10;//求出十位
k = num % 10;//求出个位
if (num == i * i * i + j * j * j + k * k * k)
{
printf("%d\n", num);
}
}
return 0;
}
运行结果: