水仙花數--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 循環時,代碼書寫區別。

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