习题4-6 水仙花数(20 分)

时间:2021-01-05 15:12:38

水仙花数是指一个N位正整数(N3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13​​+53​​+33​​。 本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3N7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3

输出样例:

153
370
371
407
#include <stdio.h>
 
 int main()
 {
     int n;
     scanf("%d", &n);
     
     int i, low = 1, high;           //low表示n位数的最小数,high表示n位数的最大数 
     for(i = 1; i < n; i++) 
     {
         low *= 10;
     } 
     high = low * 10; 
     for(i = low; i < high; i++ )
      {        //从最小数到最大数逐一遍历  
         int t = i;
         int sum = 0;
         do {
             int r = t % 10;          //r为数的末尾数字  
             t /= 10;
             int j, b = r;
             for(j = 1; j < n; j++)
              {    //让r自乘最后得到r的n次方 
                 r *= b;
              }
             sum += r; 
         } while(t > 0);
         if(sum == i)
          {               //让r的n次方和i比较 
             printf("%d\n", i);
          }
     }
     return 0;
 }