水仙花數是指一個N位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。例如:153=13+53+33。 本題要求編寫程序,計算所有N位水仙花數。
輸入格式:
輸入在一行中給出一個正整數N(3≤N≤7)。
輸出格式:
按遞增順序輸出所有N位水仙花數,每個數字占一行。
輸入樣例:
3
輸出樣例:
153 370 371 407
輸出樣例:
#include <stdio.h> #include <math.h> int main() { //N最大時 運行超時 主要有幾點原因,循環每次都要進行一次pow的計算 // int n,temp,a,b; // int sum=0; // scanf("%d",&n); // for (int i=pow(10,n-1);i<pow(10,n);i++) { // for (int j=0;j<n;j++) { // temp=pow(10,j); // a=(i/temp)%10; // b = pow(a,n); // sum += b; // } // if (sum == i) { // printf("%d\n",i); // } // sum = 0; // } int n; scanf("%d",&n); int min = pow(10,n-1); int max = pow(10,n)-1; int s[10]; for (int i=0;i<=9;i++) s[i] = pow(i,n); for (int i = min; i<=max;i++) { int sum = 0; int t= i; for (int j=1;j<=n;j++) { sum += s[t%10]; t /= 10; } if (sum == i) printf("%d\n", i); } return 0; }