什么是水仙花数?
水仙花数(Narcissistic number)也叫自恋数、自幂数或阿姆斯壮数,是指一个三位数(或称n位数)等于其各个数位的立方和,例如:$153=1^3+5^3+3^3$。
注意:水仙花数只针对三位数及以上,我们的代码也是基于三位数的水仙花数。
解水仙花数的方法
我们可以通过枚举法来解决找出所有的水仙花数。对于每个三位数n,我们可以识别它的三个数字x、y、z,然后判断其是否为水仙花数,判断方法很简单:$x^3+y^3+z^3=n$。如果判断结果为真,那么n就是一个水仙花数。
代码实现
#include <stdio.h>
int main()
{
int x,y,z,n;
for (n=100;n<=999;n++)
{
x=n/100; //取整百位数
y=n/10%10; //取十位数
z=n%10; //取个位数
if (x*x*x+y*y*y+z*z*z==n)
{
printf("%d,",n);
}
}
return 0;
}
程序解释
首先定义了三个整数变量x、y、z和一个三位数变量n。在for循环中,n从100到999递增,每次循环都会重新计算x、y、z。
注意:这里用到了取余运算(%)和整除运算(/)。其中,%就是取余数,/就是整除的意思。
在if判断中,我们就可以用$x\times x\times x+y\times y\times y+z\times z\times z==n$的方法判断是否为水仙花数。如果是,就使用printf输出。
完整代码
#include <stdio.h>
int main()
{
int x,y,z,n;
for (n=100;n<=999;n++)
{
x=n/100; //取整百位数
y=n/10%10; //取十位数
z=n%10; //取个位数
if (x*x*x+y*y*y+z*z*z==n)
{
printf("%d,",n);
}
}
return 0;
}
总结
通过这个简单的代码实现,我们可以了解到水仙花数的定义以及如何用C语言来实现找出所有的水仙花数。这也为我们之后的学习和工作打下了坚实的基础。