4-22 使用函式輸出水仙花數 (10分)
阿新 • • 發佈:2019-02-16
水仙花數是指一個N位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。例如:153=13+53+33。 本題要求編寫兩個函式,一個判斷給定整數是否水仙花數,另一個按從小到大的順序打印出給定區間(m,n)內所有的水仙花數。
函式介面定義:
int narcissistic( int number );
void PrintN( int m, int n );
函式narcissistic
判斷number
是否為水仙花數,是則返回1,否則返回0。
函式PrintN
m
, n
)內所有的水仙花數,每個數字佔一行。題目保證100≤m
≤n
10000。
裁判測試程式樣例:
#include <stdio.h> int narcissistic( int number ); void PrintN( int m, int n ); int main() { int m, n; scanf("%d %d", &m, &n); if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m); PrintN(m, n); if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n); return 0; } /* 你的程式碼將被嵌在這裡 */
輸入樣例:
153 400
輸出樣例:
153 is a narcissistic number
370
371
int narcissistic(int number) { int i, j, digit, power, powerSum, integer, count, flag; count = 0; integer = number; while (integer > 0) { integer = integer / 10; count++; } powerSum = 0; integer = number; for (i = 0; i < count; i++) { digit = integer % 10; integer = integer / 10; power = 1; for (j = 0; j < count; j++) power = power*digit; powerSum = powerSum + power; } if (powerSum == number) flag = 1; else flag = 0; return flag; } void PrintN(int m, int n) { int i; for (i = m + 1; i < n; i++) { if (narcissistic(i) == 1) printf("%d\n", i); } }