作者wupeiing (永和汪小龍)
看板C_and_CPP
標題Re: [問題]二進位數字排序
時間Sat Oct 15 21:42:03 2011
※ 引述《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
→ wupeiing:謝謝各位!!我完全忘了會有0開頭的事情....真糟糕!! 10/15 22:25