c语言水仙花数while程序,水仙花数--C语言,for循环,while 循环

水仙花数”:是指一个三位数,其各位数字的立方和等于该数本身数值。

例如:原数 : abc

个位数: c, 十位数:b ,百位数: a

则水仙花数的要求:abc = a 3 a^3a3 + b 3 b^3b3 + c 3 c^3c3; 满足这样条件的数均为水仙花数,不满足的则不是水仙花数。

思路:

要求水仙花数,首先就要知道其范围要求:三位数,则范围是[100, 999];

另外,需要满足表达式,那么我们就需要求出其对应的个位数,十位数,百位数。

怎么去求得各对应位数呢?假设申请变量 a , b , c 分别代表百十个位,获取一个数,假设为 N。

对于求数存在多种表达方式,现在介绍一种较为容易理解的方法

首先:怎么获取百位呢? 整数 N / 100 本应该带小数,但类型属于 int 型,强制转换为整数,则 百位 a = N /100;(451/100=4)

其次:怎么求十位呢?将三位数除以10并强转,将小数位(原数的个位数)去掉,现在数据的个位便是原数的十位,二位数再取10的余,得到的余数便是原数的十位。表达方式:b = N /10%10;(451/10=45;45%10=5)

然后:怎么求个位呢?在求十位中应该有所发现,求余可以得到。表达式:c = N %10;(451%10=1)

最后:怎么算是否满足呢?将水仙花数的满足表达式进行代码转换就好了。

实现过程:

#include

#include

#include

#include

#include

int main()

{

int i=100; //申请变量并初始化,目的在于控制其范围,也可以后面再赋值;

int a,b,c; //申请变量分别接收百十个位数;

while(i<=999) //进入循环体,控制具体范围,也可以用for循环,表达方式有差异;

{

a=i/100; //求百位数

b=i/10%10; //求十位数

c=i%10; //求个位数

if(i==(pow(a,3)+pow(b,3)+pow(c,3))) //判断是否满足条件的表达式,pow 函数数标准C库函数,用来求幂次方;

printf("%d\n",i);

i++;

}

return 0;

}

接下来我们看一下结果:

2dd46b9b6f0254dc666bbc2c1f14386a.png

接下来,我们尝试 for 循环:

12 #include

13 #include

14 #include

15 #include

16 #include

17 int main()

18 {

19 int i=100;

20 int a,b,c;

21 // while(i<=999)

22 for(i=100;i<1000;i++) //for 循环,注意范围(i<1000)等价于(i<=999)

23 {

24 a=i/100;

25 b=i/10%10;

26 c=i%10;

27 if(i==(pow(a,3)+pow(b,3)+pow(c,3))) //pow(a,3)也可以写成 a*a*a ;

28 {

29 printf("%d\n",i);

30 // i++; //此处是我注释掉的,原程序不需要,请思考如果i++会有什么区别?为什么?

31 }

32 // i++; //此处是我注释掉的,原程序不需要,请思考如果i++会有什么区别?且与30行有什么区别?为什么?

33 }

34 return 0;

35 }

结果如图:

6d160634df20966f7644ee22b42ae01b.png

注意:1. 请思考for循环中两处备注与原码的区别,结论异同的原因;

2.for与while 循环时,代码书写区别。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值