水仙花数问题不懂我的代码为啥不对昂?

#include
#include

int main()
{
int i,j,k,n,first,a,sum,p;
sum=0;
scanf("%d",&n);
first=1;
for(i=1;i<n;i++)
{
first*=10;
}

for(i=first;i<first*10;i++)
{int t=i;
    for(j=1;j<=n;j++)
{
    int d=t%10;
    t=t/10;
    p=d;
   for(k=1;k<n;k++)
   {
       p*=d;
   }
   sum+=p;
}
    if(sum==i)
    {
        printf("%d",i);
        printf("\n");
    }

}
return 0;

}

老铁这个逻辑有点看不懂哎,,,输入n求n以内的水仙花数?

first是干哈的,,