水仙花数是指一个三位数,其各位数字的和等于该数本身。例如:153是一个“水仙花数”,因为1的三次方+5的三次方+3的三次方=153。
本题的实现逻辑比较简单,问题的突破点在于得到三位数中的个位十位百位数。
个位数 = 三位数%10
十位数 = 三位数/10%10
百位数 = 三位数/100%10
最后判断三个数的立方和是否等于这个三位数即可。
代码如下:
void water(){ //输出所有水仙花数
int m,n,p;
for(int i = 100 ; i <= 999 ; i++){
m = i%10;
n = i/10%10;
p = i/100%10;
if(m*m*m + n*n*n + p*p*p == i)
printf("%d\n",i);
}
}
运行结果如下
类似的问题还有玫瑰花数,同理可以实现
代码如下
void rose(){ //输出所有玫瑰花数
int m,n,p,q;
for(int i = 1000 ; i <= 9999 ; i++){
m = i%10;
n = i/10%10;
p = i/100%10;
q = i/1000%10;
if(m*m*m*m + n*n*n*n + p*p*p*p + q*q*q*q == i)
printf("%d\n",i);
}
}
运行结果: