水仙花显示超时,这是咋回事呀,有没有人帮助

img


#include
#include
using namespace std;
int main()
{
int n,i;
int a, b;
cin >> n;
a = pow(10, n - 1);
b = pow(10, n);
for (i = a + 1; i < b; i++)
{
int y = i;
int sum = 0, x, j;
for (j = 0; j < n; j++)
{
x = y % 10;
sum += pow(x, n);
y /= 10;
}
if (i == sum)
{
cout << i << endl;
}
sum=0;
}
return 0;
}

优化版

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int N,i,p,t,sum,n,m,k;
    cin >> N;
    i = pow(10,N-1);
    p = 10*i;
    for(;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){
            cout << i << endl;
            if (sum%10 == 0)
                cout << ++i << endl;
        }
    }
    return 0;
}

题目放出来,