在C语言中,要实现一个代码,应该要了解代码的过程和目的。
首先我们就要知道什么是水仙花数,水仙花数本质是一种自幂数,也叫做阿姆斯特朗数,其定义为:
一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
由此:
我们需要遍历所有的三位数---也就是100->999。所以需要使用循环结构来完成此遍历。
我们需要使用三位数的各个数位的数字来计算幂的和,因此我们可以采用除10取余和除10取整来实现目的。(因为三位数只有个位,十位,百位。因此此方法更为简单,对于位数较大的求数位方法可采用高位来定权重,多次除权取整顺序计算或多次除10取余逆序计算)
最后我们只需判断其各个数位3次幂之和是否等于它本身即可,判断使用if语句即可。
#include<stdio.h>
//#include<math.h>
int main()
{
//定义变量i为要求的水仙花数,并给其赋初始值100,从100开始循环
//定义个位,十位,百位
int i=100,the_unit,decade,hundreds_place;
//使用while循环,给定循环条件不大于1000
while(i<1000)
{
//定义整形变量,计算结果得到整型
hundreds_place=i/100; //计算百位
decade=i/10%10; //计算十位
the_unit=i%10; //计算个位
//if判断是否能够输出(注意使用==表示等于,而不是用表示赋值的=)
//建议判断条件反写,方便调试运行排错
//(也可使用<math.h>库函数计算三次方)
//例:pow(the_unit,3)计算个位的三次幂
if(the_unit*the_unit*the_unit+decade*decade*decade+hundreds_place*hundreds_place*hundreds_place == i)
{
printf("%d\t",i); //打印时使用水平制表符隔开
}
i++; //自增依次判断
}
printf("\n"); //换行隔开控制台提示信息
return 0;
}
以上,我们完成了水仙花数的查找
下面是代码的运行结果:
153 370 371 407
--------------------------------
Process exited after 0.06904 seconds with return value 0
请按任意键继续. . .
当然,我们还有其他类似的自幂数
一位自幂数: 独身数
四位自幂数: 四叶玫瑰数
五位自幂数: 五角星数
六位自幂数: 六合数
七位自幂数: 北斗七星数
八位自幂数: 八仙数
九位自幂数: 九九重阳数
十位自幂数: 十全十美数
这里我们看到没有二位数的自幂数,这是真的吗?
敲代码试试看,让计算机告诉你。
后面我们还会分享其他代码的思考。