童鞋們進來看看這里,或許你們能看懂,集合各位評論的答案,以及原本答案的講解,莫噴
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的結果。
小伙伴們可以繼續往下算算哦!
2019-11-19
111
2019-09-17
啦啦啦
2018-11-20
額v過
2018-10-24
D項不是4列嗎?[][3]怎么理解
2018-10-23
里面任務題的答案在哪看
2018-10-03
我感覺我看懂了,但是去填寫代碼的時候我級的無從下手
2018-01-11
,,,?
2017-12-20
這個沒問題
2017-12-20
#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;???
}
2017-12-11
#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; ? ?
}
這么寫行不