[問題] 10進制轉2進制, 算1個數

看板C_and_CPP作者 (kk)時間12年前 (2012/01/17 16:33), 編輯推噓4(4029)
留言33則, 14人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 問題(Question): 資料輸出不對 餵入的資料(Input): 整數 預期的正確結果(Expected Output): 例如輸入整數 7 (0111) 結果算出共3個"1"(result = 3) 錯誤結果(Wrong Output): 怎樣算結果都是0....我錯過了甚麼嗎? 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/dij82x0G 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.148.237

01/17 16:41, , 1F
count<0 ???
01/17 16:41, 1F

01/17 16:46, , 2F
你在while(in>=2) 的迴圈裡沒有對result做任何事...
01/17 16:46, 2F

01/17 16:47, , 3F
第二個迴圈我是想把裡面的數字累加
01/17 16:47, 3F

01/17 16:48, , 4F
在15行下面加上result+=Binary[count]大概會有你要的結果
01/17 16:48, 4F

01/17 16:48, , 5F
第一個迴圈我是打算把10進制轉換成2進制...
01/17 16:48, 5F

01/17 16:49, , 6F
放入陣列! 再用第二個迴圈把裡面的值累加起來
01/17 16:49, 6F

01/17 16:49, , 7F
1樓大大的意思應該是count不可能是負的
01/17 16:49, 7F

01/17 16:50, , 8F
把count<0改成count>=0比較合理吧
01/17 16:50, 8F

01/17 16:55, , 9F
嗯嗯!我改了(count<0) 但是還是一樣
01/17 16:55, 9F

01/17 16:56, , 10F
請問要在15行下面加 不能直接用另一個迴圈跑
01/17 16:56, 10F

01/17 16:56, , 11F
第一個迴圈我已經把我要的東西放入陣列!
01/17 16:56, 11F

01/17 16:57, , 12F
第二個迴圈再取出累加! 不能這樣做嗎?
01/17 16:57, 12F

01/17 16:58, , 13F
Hamming Weight? en.wikipedia.org/wiki/Hamming_weight
01/17 16:58, 13F

01/17 17:02, , 14F
第一個迴圈條件改成in>0
01/17 17:02, 14F

01/17 17:03, , 15F
然後,兩個迴圈之間加上count--
01/17 17:03, 15F

01/17 17:04, , 16F
話說回來,用我的方法在15行下面加,就不用第二個迴圈了
01/17 17:04, 16F

01/17 17:08, , 17F
瞭解了!! 謝謝!!! 出社會太久沒寫程式 有點惱殘><
01/17 17:08, 17F

01/17 17:12, , 18F
話說令了個 i 又不用它...
01/17 17:12, 18F

01/17 17:13, , 19F
http://codepad.org/42Drc3vt 用 bitwise operator?
01/17 17:13, 19F

01/17 19:20, , 20F
while(num){num^=num&(-num);count++;}
01/17 19:20, 20F

01/17 19:20, , 21F
推樓上!根本不需要先自己轉二進制
01/17 19:20, 21F

01/17 19:36, , 22F
阿飄先生的寫法比較簡潔
01/17 19:36, 22F

01/17 20:10, , 23F
這題目好熟喔@@
01/17 20:10, 23F

01/17 20:33, , 24F
firejox 高招
01/17 20:33, 24F

01/17 20:59, , 25F
不知道我有偏執狂還是.. http://codepad.org/zFnKNyNl
01/17 20:59, 25F

01/17 21:01, , 26F
XD
01/17 21:01, 26F

01/17 21:04, , 27F
偶爾開一下外掛也不錯 http://codepad.org/OUmaA9T1
01/17 21:04, 27F

01/17 23:50, , 28F
do{cnt+=num&1;}while(num>>=1); 不知道對不對...
01/17 23:50, 28F

01/17 23:52, , 29F
不過都要宣告成unsigned吧?且我上面那行 code 沒驗證過
01/17 23:52, 29F

01/17 23:54, , 30F
至少num要unsigned,且會被改。cnt只要先設為0的整數型
01/17 23:54, 30F

01/18 00:01, , 31F
用 union 似乎也可以
01/18 00:01, 31F

01/19 22:56, , 32F
http://0rz.tw/9Ndv0 推一個簡單好記的作法 不用轉成二進位
01/19 22:56, 32F

01/19 23:29, , 33F
那這個呢val = ~-val 呢
01/19 23:29, 33F
文章代碼(AID): #1F5J9QqW (C_and_CPP)