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

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

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 回答

111

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

啦啦啦

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

额v过

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

D项不是4列吗?[][3]怎么理解

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

里面任务题的答案在哪看

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

我感觉我看懂了,但是去填写代码的时候我级的无从下手

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

,,, 

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

这个没问题

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

#include <stdio.h>
int main()
{
    //定义三位数num,个位数sd,十位数td,百位数hd
    int num, sd, td, hd;
    //循环所有三位数
    for(num=100;num<=999;num++)
    {
        //获取三位数字num百位上的数字
        hd = num/100;
        //获取三位数字num十位上的数字
        td =(num/10)%10;
        //获取三位数字num个位上的数字
        sd =num%10;
        //水仙花数的条件是什么?
        if(hd*hd*hd+td*td*td+sd*sd*sd==num)
        {
            printf("水仙花数字:%d\n", num);   
        }
    }
    return 0;   
}

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

#include <stdio.h>

int main()

{

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

    int num, sd, td, hd;

    //循环所有三位数

    for( sd=0,td=0,hd=0 ;sd<=9,td<=9,hd<=9 ;sd++,td++,hd++)

    {

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

        {

            if(num>=100)

            {

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

            }

        }

    }

    return 0;    

}

这么写行不

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

小方lll

当然不行啦,这个全部都是一样的数字相乘
2018-04-03 回复 有任何疑惑可以回复我~
首页上一页123456下一页尾页

举报

0/150
提交
取消

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

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