水仙花数--C语言,for循环,while 循环

水仙花数”:是指一个三位数,其各位数字的立方和等于该数本身数值。
例如:原数 : abc
个位数: c, 十位数:b ,百位数: a

则水仙花数的要求:abc = a3a^3 + b3b^3 + c3c^3; 满足这样条件的数均为水仙花数,不满足的则不是水仙花数。

思路:

要求水仙花数,首先就要知道其范围要求:三位数,则范围是[100, 999];

另外,需要满足表达式,那么我们就需要求出其对应的个位数,十位数,百位数。

怎么去求得各对应位数呢?假设申请变量 a , b , c 分别代表百十个位,获取一个数,假设为 N。

对于求数存在多种表达方式,现在介绍一种较为容易理解的方法

首先:怎么获取百位呢? 整数 N / 100 本应该带小数,但类型属于 int 型,强制转换为整数,则 百位 a = N /100;(451/100=4)
其次:怎么求十位呢?将三位数除以10并强转,将小数位(原数的个位数)去掉,现在数据的个位便是原数的十位,二位数再取10的余,得到的余数便是原数的十位。表达方式:b = N /10%10;(451/10=45;45%10=5)
然后:怎么求个位呢?在求十位中应该有所发现,求余可以得到。表达式:c = N %10;(451%10=1)
最后:怎么算是否满足呢?将水仙花数的满足表达式进行代码转换就好了。

实现过程:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <strings.h>
int main()
{
	int i=100;    //申请变量并初始化,目的在于控制其范围,也可以后面再赋值;
	int a,b,c;       //申请变量分别接收百十个位数;
	while(i<=999)     //进入循环体,控制具体范围,也可以用for循环,表达方式有差异;
	{
		a=i/100;         //求百位数
		b=i/10%10;       //求十位数
		c=i%10;          //求个位数
		if(i==(pow(a,3)+pow(b,3)+pow(c,3)))    //判断是否满足条件的表达式,pow 函数数标准C库函数,用来求幂次方;
			printf("%d\n",i);
		i++;
	}
	return 0;
}

接下来我们看一下结果:
在这里插入图片描述

接下来,我们尝试 for 循环:

 12 #include <stdio.h>
 13 #include <string.h>
 14 #include <stdlib.h>
 15 #include <math.h>
 16 #include <strings.h>
 17 int main()
 18 {
 19         int i=100;
 20         int a,b,c;
 21 //      while(i<=999)
 22         for(i=100;i<1000;i++)  //for 循环,注意范围(i<1000)等价于(i<=999)
 23         {
 24                 a=i/100;
 25                 b=i/10%10;
 26                 c=i%10;
 27                 if(i==(pow(a,3)+pow(b,3)+pow(c,3)))   //pow(a,3)也可以写成 a*a*a ;
 28                 {
 29                         printf("%d\n",i);
 30       			   //    i++;     //此处是我注释掉的,原程序不需要,请思考如果i++会有什么区别?为什么?
 31                 }
 32                	 //      i++; //此处是我注释掉的,原程序不需要,请思考如果i++会有什么区别?且与30行有什么区别?为什么?
 33                 }
 34         return 0;
 35 }

结果如图:
在这里插入图片描述
注意:1. 请思考for循环中两处备注与原码的区别,结论异同的原因;
2.for与while 循环时,代码书写区别。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章