为了账号安全,请及时绑定邮箱和手机立即绑定

童鞋们进来看看这里,或许你们能看懂,集合各位评论的答案,以及原本答案的讲解,莫喷

1、有的童鞋说判断条件可以是<=999,这点是没有任何问题的。

<1000或者<=999都是没有任何问题的。

2、hd=num / 100;

   打个比方,比如num=211。

   211 / 100=2.11

   因为你定义的是int类型,输出的也是整数类型。

   所以计算机也不会给你四舍五入的计算,它只会

   获得你的整数部分的数目。

3、td=(num%100) / 10;

   根据上面的结论可以得出。

   num=212;

   211%100他只得到了两个数值:12;

   但是我们需要个位的数值,所以我们还要除以10;

   12/10=1.1;

   根据上面结论可以得出,计算机只会取你的整数部分。

   所以我们就轻松的获得了十位数的1;

4、sd=num % 10;

   根据上面的结论可以得出一个怎么样的结果呢?

   num=211;

   212%10 = = 2;根据上面的结论可以自己算算。这里就不

   多加解释。

二、很多聪明的童鞋有另外几种解释方法。

    我也看入迷了。

    比如获得个位数的数字可以用以下这种方法

    num / 10 % 10

    num=211;

    211/10=11;

    11%10=1;

    这样我们也可以得到个位数;

三、有个童鞋的几行数据也让我耳目一新;

    我也照葫芦画瓢的把数值带入进去算了一下;

    以下是计算结果:

    #define num = 100;

    hd = (num-num%100)/100;

    //同学方法

    hd = (100-0)/100;

    hd = 1;

    //带入法

    td = (num%100-num%10)/10;

    td = (0-0)/10;

    td = 0;

    sd = num%10;

    sd = 0;

    这样三位数就得出来了。

四、还有童鞋最后的if(sum == hd*hd*hd+td*td*td+sd*sd*sd)

    是不是少打了一个等于号结果就变了?我们来看看。

    for(sum=100;sum<1000;sum++)

{

hd = sum / 100;

td = (sum%100) / 10;

sd = sum % 10;

if(sum = hd*hd*hd+td*td*td+sd*sd*sd)

//少打了一个等于号。这代表的是赋值,而不是等于!!

}

    我们来一步一步带入数值看看为什么会出现那种结果:

    sum=100;

    hd = 1;

    td = 0;

    sd = 0;

     因为if里面是赋值运算,并不是相等运算。

    请看这两个式子

    sum = 1;

    sum == 1;

第一个的解释是把1这个数字赋值到sum里,并没判断他们相等

所以就会直接输出一个1字。

第二个的解释是sum是否等于1;100!=1的,所以不会输出内容,直到水仙花模式开启!

sum == 153;

这样就会输出153;

    小伙伴就会问,那第一个式子往下走呢?

    这里我就给大家带入看看。

    因为sum = 1;

    输出一个1之后,然后又进入for模式:

    因为我给sum赋值了一个1;

    所以for里面定义的变量就起不了作用。

    我循环照样循环;

    自增也照样自增。

    然后 sum++就为2了。

    hd = num /100;

其结果是小数,啪叽结果就为0;

    td = (num%100)/10;

    td = 2 /10;

又是小数。啪叽结果又为0;

    sd = num % 10;

    sd = 2 % 10

    sd = 2;

进入if(num = 0+0+2*2*2)

     又是赋值运算 num = 8;

输出一次是不是8呢?

因为是赋值运算,而不是判断。所以又一次输出num的结果。

小伙伴们可以继续往下算算哦!


正在回答

60 回答

赞赞赞~

1 回复 有任何疑惑可以回复我~

td=(num%100) / 10;

   根据上面的结论可以得出。

   num=212;

   211%100他只得到了两个数值:12;

   但是我们需要个位的数值,所以我们还要除以10;

   12/10=1.1;

   根据上面结论可以得出,计算机只会取你的整数部分。

   所以我们就轻松的获得了十位数的1;

个位就是2 了


0 回复 有任何疑惑可以回复我~

为啥用pow(sd,3).......不行呢?

1 回复 有任何疑惑可以回复我~

还真的是 if语句==写成=了,调试了十多分钟愣是没看出来

0 回复 有任何疑惑可以回复我~

很厉害   解释的挺好的

0 回复 有任何疑惑可以回复我~

td=num/10%10,是用来得十位数的。  例:321/10%10=2

但是当td=(num/100)%10时,321/100%10=1,得到的是个位数,而不是十位数。

0 回复 有任何疑惑可以回复我~

数学6666

2 回复 有任何疑惑可以回复我~

你们都不是用212%10来求得个位么,,,难道是这个有什么错么

0 回复 有任何疑惑可以回复我~

#include <stdio.h>

int main()

{

    //定义三位数num,个位数sd,十位数td,百位数hd

    int num, sd, td, hd;

    //循环所有三位数

    for(num=100;num<1000;num++)

    {

        //获取三位数字num百位上的数字

        hd =num%10;

        //获取三位数字num十位上的数字

        td =num/10%10;

        //获取三位数字num个位上的数字

        sd =num/100;

        //水仙花数的条件是什么?

        if(num==hd*hd*hd+td*td*td+sd*sd*sd ) 

        {

            printf("水仙花数字:%d\n", num);    

        }

    }

    return 0;    

}


7 回复 有任何疑惑可以回复我~
#1

慕粉3276984

123
2016-04-27 回复 有任何疑惑可以回复我~
#2

慕粉004404296

错误吧
2016-12-16 回复 有任何疑惑可以回复我~
#3

慕粉0911154527

有问题~ 应该是这样: hd=num/100; td=num/10%10; sd=num%10;
2017-02-09 回复 有任何疑惑可以回复我~
#4

Jennifer10

这是写的什么 错的
2017-02-22 回复 有任何疑惑可以回复我~
#5

钟阿瞒i

没加括号么?
2017-07-13 回复 有任何疑惑可以回复我~
查看2条回复

思路很好,就是有些地方数字搞错了

3、td=(num%100) / 10;

   根据上面的结论可以得出。

   num=212;应该是211吧?,

   211%100他只得到了两个数值:12;这里应该是11吧?

   但是我们需要个位的数值,所以我们还要除以10;

   12/10=1.1;  该是11.

   根据上面结论可以得出,计算机只会取你的整数部分。

   所以我们就轻松的获得了十位数的1;

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

童鞋们进来看看这里,或许你们能看懂,集合各位评论的答案,以及原本答案的讲解,莫喷

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信