童鞋们进来看看这里,或许你们能看懂,集合各位评论的答案,以及原本答案的讲解,莫喷
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的结果。
小伙伴们可以继续往下算算哦!