水仙花数,哪错了,求解

img


#include
#include
int pan(int z,int y);
int main()
{
int n,i,a,b=0,c,d,e,f;
scanf("%d",&n);
d=pow(10,n-1);
e=pow(10,n)-1;
for(i=d;i<=e;i++){
if(pan(i,n)==i){
printf("%d\n",i);
}
}
return 0;
}

int pan(int z,int y){
int x,w,v;
v=0;
while(z){
x=z%10;
z=z/10;
w=pow(x,y);
v=v+w;
}
return v;
}

img

// Author:PanDaoxi
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int INF = 8;
int n, k, t;

signed main(){
    ios :: sync_with_stdio(false);
    
    cin >> n;
    for(int i=pow(10, n-1); i<=pow(10, n)-1; i++){
        t = i, k = 0;
        while(t){
            k += pow(t%10, n);
            t /= 10;
        }
        if(k == i) cout << i << endl;
    }
    
    return 0;
}

实在不行的话就打表吧,这个数据范围挺小的。毕竟n2过百万。

思路:对于一个数,把每一位抠出来,并计算n方和,若与原数相等,则为水仙花数

如 x = 153
int sum = 0;
int t = x;
while(t)
{
Sum += pow(t%10,n);
t/= 10;
}

if (sum == x)
则 printf(“水仙花数”);