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

请问一下在pta里这个问题代码如下为什么会有一组数据运行超时


```c
#include<stdio.h>
#include<math.h>

int i1(int x,int N)
{
    int a=0,sum=x,p=0;
    while(x)
    {
        a=x%10;
        x=x/10;
        p+=pow(a,N);
    }
    if(p==sum)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int i=0;
    for (i = pow(10, n - 1); i < pow(10, n); i++)
    {
        if(i1(i,n)==1)
        {
            printf("%d\n",i);
        }
    }
    return 0;
}

```

这么改下试试:

#include<stdio.h>
#include<math.h>
int main()
{
    int N,i,p,t,sum,n,m,k;
    scanf("%d",&N);
    p = pow(10,N);
    for(i = pow(10,N-1);i < p;i++){
        for(sum=0,t=i;t>0;t/=10){
            m=N;k=1;
            n = t%10;
            while(m--)k*=n;
            sum+= k;
        }
        if(sum==i)
           printf("%d\n",i);
    }
    return 0;
}