#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for(num=100 ; num<1000;num++)
{
//获取三位数字num百位上的数字
hd =num-td*10-sd ;
//获取三位数字num十位上的数字
td = num-sd-hd*100 ;
//获取三位数字num个位上的数字
sd = num-hd*100-td*10 ;
//水仙花数的条件是什么?
if(num==hd*hd*hd+td*td*td+sd*sd*sd )
{
printf("水仙花数字:%d\n", num);
}
}
return 0;
}
你的代码中存在几个关键问题,主要是关于如何正确地从一个三位数中提取百位、十位和个位数字的方法。你当前的计算方法是不正确的。正确的做法应该使用除法和取模运算来分别获取这三个位置上的数值。
/
)和求余(%
)运算符。sd
和td
的情况下就尝试使用它们进行计算,这会导致逻辑错误。num / 100
来获取百位数字。(num % 100) / 10
来获取十位数字。num % 10
来获取个位数字。#include <stdio.h>
int main()
{
// 循环遍历所有三位数
for(int num = 100; num < 1000; num++)
{
// 获取三位数num的百位、十位和个位上的数字
int hd = num / 100;
int td = (num % 100) / 10;
int sd = num % 10;
// 检查是否为水仙花数
if(num == hd*hd*hd + td*td*td + sd*sd*sd)
{
printf("水仙花数字:%d\n", num);
}
}
return 0;
}
这段修改后的代码能够正确识别并打印所有的水仙花数(即每个位上的立方和等于该数本身的三位数)。希望这能解决你的问题。如果还有其他疑问,请继续提问。
不是从,是运行成功没有输出