水仙花数是指一个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 ",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 ", i); } return 0; }