while循环前,初始化为a=0,以用于重新计算每个f的三次幂之和;
然后用一个临时变量记录f,用临时变量记录f的值,来计算f的每个数位的3次幂之和;
最后再判断这个和是否和f相等就可以了。
修改如下:
参考链接:
#include <stdio.h>
int main(void){
int f,b,a=0,c=99;
for(f=100;f<1000;f++){
// 用临时变量temp记录每个f的值
int temp=f;
// 存储f每个数位的3次幂之和的变量,每次判断初始化为0
a=0;
// 求当前f的每个数位数字3次幂之和
while(temp!=0){
b=(temp%10);
a+=(b*b*b);
temp/=10;
}
// https://cn.bing.com/?mkt=zh-CN
// 如果f的每个数位3次幂之和a等于f,则f是水仙花数,打印它
if(f==a){
printf("%d\n",a);
}
}
return 0;
}
f 是 for循环的循环变量,while循环里已经修改了它,这是有问题的
另外,每次内循环 while之前,a 都需要初始化为0,为了不影响下次计算