题意
水仙花数是指一个 n 位数 ( n >= 3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
给出一个整数M(10 <= M <= 1000),求 >= M的最小的水仙花数。
解题思路
先求出2000内所有的水仙花数,然后对于M,从M位置往后寻找符合条件的水仙花数
参考代码
#include <iostream>
#include <string.h>
using namespace std;
#define MAXN 2000+2
int a[MAXN];
int pow(int x,int n){
int ans=1;
while (n--) ans*=x;
return ans;
}
int getBit(int x){
int cnt=0;
while (x){
cnt++;
x/=10;
}
return cnt;
}
bool flower(int x){
int k=x,ans=0;
int d=getBit(x);
while (k){
int tmp=k%10;
k/=10;
ans+=pow(tmp,d);
}
if (ans==x) return 1;
return 0;
}
int main(){
int n;
memset(a,0,sizeof(a));
for (int i=1;i<MAXN;i++)
a[i]=flower(i);
while (cin>>n){
while (a[n]==0) n++;
cout<<n<<endl;
}
return 0;
}