水仙花數是指一個N位正整數(N>=3),它的每個位上的數字的N次冪之和等於它本身。例 如:153 = 13 + 53+ 33。 本題要求編寫程序,計算所有N位水仙花數。
輸入格式:
輸入在一行中給出一個正整數N(3<=N<=7)。
輸出格式:
按遞增順序輸出所有N位水仙花數,每個數字占一行。
輸入樣例:
3
輸出樣例:
153 370 371 407
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; 6 scanf("%d", &n); 7 8 int i, low = 1, high; //low表示n位數的最小數,high表示n位數的最大數 9 for(i = 1; i < n; i++) { 10 low *= 10; 11 } 12 high = low * 10; 13 for(i = low; i < high; i++ ) { //從最小數到最大數逐一遍歷 14 int t = i; 15 int sum = 0; 16 do { 17 int r = t % 10; //r為數的末尾數字 18 t /= 10; 19 int j, b = r; 20 for(j = 1; j < n; j++) { //讓r自乘最后得到r的n次方 21 r *= b; 22 } 23 sum += r; 24 } while(t > 0); 25 if(sum == i) { //讓r的n次方和i比較 26 printf("%d\n", i); 27 } 28 } 29 30 return 0; 31 }