看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《wupeiing (永和汪小龍)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : C : 問題(Question): : 執行錯誤 : 餵入的資料(Input): : 任意二進位數 : 預期的正確結果(Expected Output): : K會跑出輸入的數字中1的個數 : 錯誤結果(Wrong Output): : 輸入的binary中 最後一個1會算不到 : 如 輸入 1111 k會等於3 : 程式碼(Code):(請善用置底文網頁, 記得排版) : 這只是其中一個function 是為了算出binary中1的個數 : 變數c代表的是次方數 從另一個function已經算出c會是binary的最高位次方-1 : 如 輸入 1111 c會等於3 : int ones(int binary) : { : int c,a,i,k=0; : c=order(binary); : while(c>=0) : { : i=(int)pow(10,c); : a=binary/i; : binary=(binary)%i; : if(a==1) : { : k=k+1; : } : c=c-1; : } : return k; : } : 真的很謝謝各位的幫忙 不好意思...改了之後還是不對欸 我把打到目前的程式碼po上來好了 其實是要使用者輸入二進位數字 例如 1100101 output出來是要排過序的 例如1111000 這樣 然後不能使用陣列 指標 我是想說 用function算出1的個數(在main以k為變數) 然後算出此二進位的位數(在main中以c為變數) c-k就會是0的個數(main中以a為變數) 最後用迴圈printf出K次的1再printf出a次的0就會是答案了 目前還沒做到最後用迴圈printf的動作 還在算k的個數就一直卡住 以下是目前為止的程式碼 #include <stdio.h> #include <stdlib.h> int order(int binary) { int a,c=0,n,i=pow(10,c); while(i<=binary) { c=c+1; i=(int)pow(10,c); } c--; return c; } int ones(int binary) { int c,a,i,k=0; c=order(binary); while(c>=0) { i=(int)pow(10,c); a=binary/i; binary=(binary)%i; if(a==1) { k=k+1; } c=c-1; } return k; } int main() { int binary,c,a,k; scanf("%d",&binary); c=order(binary)+1; k=ones(binary); a=c-k; printf("%d %d",k,a);//是為了先看我的k是不是正確的 正確才會去寫loop system("PAUSE"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.71.244.63 ※ 編輯: wupeiing 來自: 219.71.244.63 (10/15 21:45)
EdisonX:文章列表按 E 修改內文... 10/15 21:44
wupeiing:不好意思...我修改好了 謝謝!!! 10/15 21:46
EdisonX:另輸入是 10 進位還是 2 進位? input: 15 or 1111 ? 10/15 21:46
firejox:不能使用陣列或指標..... 10/15 21:50
firejox:getchar().... 10/15 21:50
wupeiing:輸入2進位 我比較想問為什麼算K都是錯的... 10/15 21:52
firejox:算錯很正常 因為根本沒寫對... 10/15 21:56
firejox:你的k可以這樣算也真強... 10/15 21:57
tropical72:你不能用整數方式讀入,讀到0開頭的數字會出包. 10/15 22:06
firejox:進位轉換的重點就是 乘上基數呀~~~~ 10/15 22:11
tropical72:另一個思維,firejox 已點出來了,我也覺得那較佳 : 10/15 22:12
tropical72:http://codepad.org/k9dEm1Pk 10/15 22:12
wupeiing:謝謝各位!!我完全忘了會有0開頭的事情....真糟糕!! 10/15 22:25