如何用C語言完成水仙花數的搜索
概念講解:
什么是水仙花數呢?
所謂的水仙花數是指:一個n 位數( n≥3 ),它的每個位上的數字的n 次冪之和等于它本身, 例如153,370,371等都是水仙花數,就拿153來說,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3
代碼思路
- 為了搜索指定范圍的所有水仙花數,最好的辦法當然是遍歷啦,因此,撰寫代碼的第一步就是確定使用for回圈實作對目標范圍所有數字的遍歷
- 根據水仙花數的概念,我們必須確定當前數字的位數,這樣才能確定每一位上的數字應該用幾次方來求和
例如:153的位數為3;370的位數為3;1634的位數為4; - 確定好當前數字的位數后,則需要求出來當前數字的每一位上都是幾
例如:153的每一位上的數字分別為1、5、3;370的每一位上的數字分別為3、7、0; - 知道當前數字的位數,以及每一位上的數字分別是什么后,剩下的就剩下求和了
例如: 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3; 370=3 * 3 * 3+7 * 7 * 7+0 * 0 * 0;
1634=1 * 1 * 1 * 1+6 * 6 * 6 * 6+3 * 3 * 3 * 3+4 * 4 * 4 * 4; - 將最終的求和結果和當前數字進行比較,如果相等,則為水仙花數,如果不是,那進行下一個數字的判斷,直到遍歷所有待求范圍的數字
具體代碼
#include<stdio.h>
//水仙花數
//1.確定位數
//2.確定每個數字
//3.判斷
int pow(int number, int times) //自定義函式求number的times次方
{
int result = 1;
for (int i = 0; i < times; i++)
{
result *= number;
}
return result;
}
int main()
{
for (int i = 100; i <= 100000; i++)//查找范圍
{
//判斷位數
int count = 1;
int sum = 0;
int tem = i;
while (tem / 10)
{
count++;
tem /= 10;
}
//確定每一位的值,求count次方后,累加起來
tem = i;
for (int j = 0; j < count; j++)
{
sum += pow(tem % 10, count);
tem /= 10;
}
//判斷累加和是否與當前數字相同,相同則為水仙花數,將其列印出來
if (sum == i) {
printf("當前水仙花數為:%d \n", i);
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/232603.html
標籤:其他
下一篇:c#通訊錄管理系統(女朋友版本)
