2010年3月23日 星期二

計算位元為1 的個數

計算機概論是一門令人又愛又恨的科目,它的內容可謂包羅萬象。遇到考試時,事前需要花很多時間準備,才能拿到高分。在學習的內容中,有個章節是數字系統轉換,內容是將一個十進位的數字,轉換成二進位的數字。現在請你設計一個程式,計算由十進位數字轉換的二進位數字中,位元等於1 的個數。
輸入說明
第一行的數字,代表有幾個十進位的數字。第二行開始的每一行,為一個十進位數字,
其範圍為[0, 2147483647]的整數。

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

輸入範例:
2
1027
65535

輸出範例:
3
16

7 則留言:

  1. Private Sub Form_Load()
    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
    ans = 0
    Do Until x = 0
    ans = ans + x Mod 2
    x = x \ 2
    Loop
    Print #2, ans
    Next i
    Close #1
    Close #2
    End Sub

    回覆刪除
  2. Private Sub Form_Load()
    Dim qq(30) As Integer
    Dim y As Long
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, x
    For i = 1 To x
    ans = 0
    Input #1, y
    Do
    temp = y Mod 2
    If temp = 1 Then ans = ans + 1
    y = y \ 2
    Loop Until y < 1
    Print #2, ans
    Next i
    Close #1
    Close #2
    End Sub

    回覆刪除
  3. 網誌管理員已經移除這則留言。

    回覆刪除
  4. Y揚、阿瑋好,
    你們的程式都ok,程式要丟出來之前,還是要多檢查,儘量不要一po再po,然後再刪,比賽時,最可怕的就是明明會,出了個小錯誤,而沒看到。一年的努力,(不只你們哦,還有"我"),都可惜了哦。
    從平常練習就注意這些小細節吧。
    另外,Y揚,你的程式中
    If temp = 1 Then ans = ans + 1
    這行改像阿瑋那樣比較好吧,反正不是0就是1,少個判斷,直接加了吧。

    回覆刪除
  5. Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, qqq
    For i = 1 To qqq
    Input #1, x
    ans = 0
    Do
    ans = ans + x Mod 2
    x = x \ 2
    Loop Until x = 0
    Print ans
    Next i
    Close #2
    Close #1
    End Sub

    回覆刪除
  6. Open "test5.txt" For Input As #1
    Input #1, q
    Do While Not EOF(1)
    Input #1, k
    Do Until k = 1
    m = k Mod 2
    k = k \ 2
    j = j + m
    Loop
    j = j + 1
    Open "result5.txt" For Append As #2
    Write #2, j
    Close #2
    j = 0
    Loop
    Close #1

    回覆刪除