2011年7月6日 星期三

計算位元為1 的個數

計算機概論是一門令人又愛又恨的科目,它的內容可謂包羅萬象。遇到考試時,事前需
要花很多時間準備,才能拿到高分。在學習的內容中,有個章節是數字系統轉換,內容是將
一個十進位的數字,轉換成二進位的數字。現在請你設計一個程式,計算由十進位數字轉換
的二進位數字中,位元等於1 的個數。

輸入說明:
第一行的數字,代表有幾個十進位的數字。第二行開始的每一行,為一個十進位數字,
其範圍為[0, 2147483647]的整數。

輸出說明:
對輸入的十進位數字,以一行分別輸出轉換成二位進數字中,位元等於1 的個數。

輸入範例:
2
1027
65535

輸出範例:
3
16

98 學年度商業類科學生技藝競賽第五題

6 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, N
    For i = 1 To N
    Input #1, X
    Print #2, MOne(ten_to_two(X))

    Next i
    Close #2
    Close #1
    End
    End Sub

    Function MOne(A)
    ans = 0
    For i = 1 To Len(A)
    If Mid(A, i, 1) = 1 Then ans = ans + 1
    Next i
    MOne = ans
    End Function

    Function ten_to_two(ByVal B)
    Dim ans As String, C() As String
    ans = ""
    C = Split("0 1")
    Do
    X = B Mod 2
    ans = C(X) & ans
    B = B \ 2
    Loop Until B = 0
    ten_to_two = ans
    End Function


    -------------------
    in.txt
    4
    1027
    65535
    11011
    99999
    ---------------------------------
    out.txt
    3
    16
    6
    10

    回覆刪除
  2. 你的 out 少給第一組 "4" 的答案

    位元等於1 ... 這個講得不是很標準吧
    一開始還看不懂是什麼意思
    原來是 "1" 的個數阿

    回覆刪除
  3. 4是= =
    四組數字

    題目是直接從題目FPD抓下來的:)
    我看到那段也覺得怪怪的=口=

    回覆刪除
  4. 原來如此...我沒看清楚 xD



    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, Ti


    For i = 1 To Ti
    Input #1, n
    Print #2, Count1(n)
    Next


    Close
    Close
    End
    End Sub

    Function Count1(n)
    Dim ans
    n = Turn2(n)
    For i = 1 To Len(n)
    If Mid(n, i, 1) = 1 Then ans = ans + 1
    Next
    Count1 = ans
    End Function




    Function Turn2(ByVal a)
    Dim ans
    Do
    b = a Mod 2
    ans = b & ans
    a = a \ 2
    Loop Until a = 0
    Turn2 = ans
    End Function

    回覆刪除
  5. 佑、arro好,
    這一題你們都正確。
    但是,你們還是像上次用大數加減乘除那題的餘蔭一樣,你們用了之前的轉2進位的函數,這實在是沒必要。
    這題只要一直除以2,將所有的餘數加起來就是了。(不管餘數是0還是1,反正加多少個0也沒關係)

    回覆刪除
  6. 熊掌好,

    對吼,
    餘1,答案就加1
    又學到一招,謝老師

    回覆刪除