習題4 6 水仙花數

2021-10-21 06:18:16 字數 1104 閱讀 2673

水仙花數是指乙個n位正整數(n≥3),它的每個位上的數字的n次冪之和等於它本身。例如:153=1​3+53+33。本題要求編寫程式,計算所有n位水仙花數。

輸入在一行中給出乙個正整數n(3≤n≤7)。

按遞增順序輸出所有n位水仙花數,每個數字佔一行。

3
153

370371

407

第一段**:

#include

#include

intmain()

if(sum==i)

printf

("%d\n"

,i);

}return0;

}

這段**測試結果如下圖:

測試點3執行超時,思考如何讓**在規定時間限制內執行結束。

可以發現,這段**運用到了巢狀迴圈,內層迴圈體時間複雜度為o(10n*n)。

但其實pow()函式內還存在迴圈,而且因為涉及到實型資料的冪函式計算,函式實現比較複雜。但觀察本題對於pow()函式並不要求實數的冪函式的計算,因此嘗試自己寫乙個簡單的僅適用於整型資料的pow(),可能可以減少一定執行時間。

於是,第二段**嘗試加入自己編寫的pow(),如下:

#include

intpow

(int

,int);

intmain()

if(sum==i)

printf

("%d\n"

,i);

}return0;

}int

pow(

int a,

int b)

測試結果如下圖:

所有測試點都通過。測試點3略危險。

思考或許還能改進的更加有效率??可以犧牲記憶體,換取時間。

改進中。。。

習題4 6 水仙花數

水仙花數是指乙個n位正整數 n 3 它的每個位上的數字的n次冪之和等於它本身。例如 153 153 13 5 3 3 3 本題要求編寫程式,計算所有n位水仙花數。輸入格式 輸入在一行中給出乙個正整數n 3 n 7 輸出格式 按遞增順序輸出所有n位水仙花數,每個數字佔一行。3153 370371 40...

習題4 6 水仙花數

水仙花數是指乙個n位正整數 n 3 它的每個位上的數字的n次冪之和等於它本身。例如 153 1 5 3 本題要求編寫程式,計算所有n位水仙花數 輸入在一行中給出乙個正整數n 3 n 7 按遞增順序輸出所有n位水仙花數,每個數字佔一行。153370 371407 輸入幾就是幾位數我們可以用pow 10...

習題4 6 水仙花數

習題4 6 水仙花數 20分 水仙花數是指乙個n位正整數 n 3 它的每個位上的數字的n次冪之和等於它本身。例如 153 1 3 5 3 3 3 本題要求編寫程式,計算所有n位水仙花數。輸入在一行中給出乙個正整數n 3 n 7 按遞增順序輸出所有n位水仙花數,每個數字佔一行。3153 370371 ...