水仙花数是指一个 n 位数 ( n >= 3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
给出一个整数M,求 >= M的最小的水仙花数。
打表把 注释掉的是打表代码
表在下面的table树组
以下是我这个蒟蒻的打表代码 > <
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
/*
ll quick(ll a,ll n)
{
ll base=a,ans=1;
while(n)
{
if(n&1)
ans=(ans*base);
base=(base*base);
n>>=1;
}
return ans;
}
int main()
{
char a[5];
//scanf("%s",a);
for(int i=100;i<=10000;i++)
{
sprintf(a,"%d",i);
int len=strlen(a);
if(len==3)
{
if(((a[0]-'0')*100+(a[1]-'0')*10+(a[2]-'0'))==(quick((a[0]-'0'),3)+quick((a[1]-'0'),3)+quick((a[2]-'0'),3)))
printf("%d\n",((a[0]-'0')*100+(a[1]-'0')*10+(a[2]-'0')));
}
if(len==4)
{
if(((a[0]-'0')*1000+(a[1]-'0')*100+(a[2]-'0')*10+(a[3]-'0'))==(quick((a[0]-'0'),4)+quick((a[1]-'0'),4)+quick((a[2]-'0'),4)+quick((a[3]-'0'),4)))
printf("%d\n",((a[0]-'0')*1000+(a[1]-'0')*100+(a[2]-'0')*10+(a[3]-'0')));
}
}
}*/
int main()
{
int a;
int table[7]={153,370,371,407,1634,8208,9474};
scanf("%d",&a);
for(int i=0;i<7;i++)
{
if(a<=table[i]) {printf("%d",table[i]);break;}
}
return 0;
}