判斷一個數是不是水仙花數
基本思想:判斷一個數是不是水仙花數,首先要知道什麼是水仙花數
我們将一個 3 位數,它的每個位上的數字的 3次幂之和等于它本身的數稱為水仙花數
例如:153=1^3+5^3+3^3
在編寫程式之前,我們要了解水仙花數的限制條件
首先水仙花數是一個三位數,即其應該滿足100~999
其次就是滿足水仙花數的基本特征
得到判斷水仙花數的函數體如下
result += (int)pow(i % 10, 3);
i = i / 10;
這是水仙花數的判斷基本函數體
接下來要完成要求我們還要用函數将其封裝起來,依據要求,傳回值是正确或者錯誤
是以我們将函數傳回值類型定義為bool類型
得到以下的判斷函數體
bool isflower(int num) {
int result = 0;
int i;
bool flag = false;
i = num;
while (i !=0) {
result += (int)pow(i % 10, 3);
i = i / 10;
}
if (result == num)
{
flag = true;
}
return flag;
}
其中 i=num;的作用是将num的值記錄并儲存下來,防止在循環前後使用同一個變量會導緻最終的結果産生錯誤。
在完成函數體後,接下來就是在主函數中調用即可
具體代碼如下
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
bool isflower(int num) {
int result = 0;
int i;
bool flag = false;
i = num;
while (i !=0) {
result += (int)pow(i % 10, 3);
i = i / 10;
}
if (result == num)
{
flag = true;
}
return flag;
}
int main() {
int num;
printf("請輸入一個三位數\n");
scanf("%d", &num);
bool result = isflower(num);
if (result == true) {
printf("這是一個水仙花數\n");
}
else {
printf("這不是一個水仙花數\n");
}
return 0;
}
調用函數時用一個與函數傳回值相同的值接收函數傳回結果
再用選擇語句輸出結果
我們用153作為測試用例來檢驗程式正确與否
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLkNGNiZ2MiJzYiNjM0MTNhdTN4QDZ3E2N5M2N4QDOkJzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
這裡顯示153是一個水仙花數
拓展延伸
以此為基礎,我們可以設計一個程式,一次輸出所有的水仙花數
隻需要加上100~999的循環即可
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main(){
int result=0;
int i;
for (int num = 100; num < 1000; num++)
{
i = num;
result = 0;
while (i !=0) {
result += (int)pow(i % 10, 3);
i = i / 10;
}
if (result == num)
{
printf("%d\n", result);
}
}
return 0;
運作程式得到結果
其中涉及頭檔案#define _CRT_SECURE_NO_WARNINGS的使用
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.(這是在不添加頭檔案#define _CRT_SECURE_NO_WARNINGS下使用scanf的錯誤)。
是以根據錯誤我們選擇使用scanf_s代替scanf或者使用頭檔案
但scanf_s在vs上可以運作,但是換成其它編譯器則會出現問題,是以為了友善搬運和代碼複用,我們在使用scanf時應加頭檔案#define _CRT_SECURE_NO_WARNINGS。
pow函數的使用
由于pow函數計算後預設為double類型,是以這裡用(int)進行強制轉換
其次在用pow等其他數學函數時,頭檔案因加上#include<math.h>