题目连接:https://www.51nod.com/Challenge/Problem.html#!#problemId=1015
解析:题目中n是指水仙花数是三位或三位以上的数,无需定义n。要求中需要输出>=m的最小水仙花数,其实不用定义min、max比较方法,在for循环中,从小到大开始循环,只要for循环中第一次出现满足要求的数,且这一次肯定是>=m最小的水仙花数,之后一行代码加上break,结束。
如下代码,第一个for循环针对(10<=m<1000)的数,第二个for循环针对(m=1000)。
#include<stdio.h>
int main()
{
int m, i, a, b, c, d;
int flag=0;
scanf("%d", &m);
for(i=m; i<1000; i++)
{
a=i/100;
b=(i/10)%10;
c=i%10;
if((a*a*a+b*b*b+c*c*c) == i)
{
printf("%d\n",i);
flag=1;
break;
}
}
if(!flag) //此时的m>=1000
{
for(int i=1000; i<0x3f3f; i++)
{
a=i/1000;
b=(i/100)%10;
c=(i/10)%10;
d=i%10;
if((a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d) == i) //四位数就要每位数乘四次
{
printf("%d\n",i);
break;
}
}
}
return 0;
}