計算機概論是一門令人又愛又恨的科目,它的內容可謂包羅萬象。遇到考試時,事前需
要花很多時間準備,才能拿到高分。在學習的內容中,有個章節是數字系統轉換,內容是將
一個十進位的數字,轉換成二進位的數字。現在請你設計一個程式,計算由十進位數字轉換
的二進位數字中,位元等於1 的個數。
輸入說明:
第一行的數字,代表有幾個十進位的數字。第二行開始的每一行,為一個十進位數字,
其範圍為[0, 2147483647]的整數。
輸出說明:
對輸入的十進位數字,以一行分別輸出轉換成二位進數字中,位元等於1 的個數。
輸入範例:
2
1027
65535
輸出範例:
3
16
98 學年度商業類科學生技藝競賽第五題
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
你的 out 少給第一組 "4" 的答案
回覆刪除位元等於1 ... 這個講得不是很標準吧
一開始還看不懂是什麼意思
原來是 "1" 的個數阿
4是= =
回覆刪除四組數字
題目是直接從題目FPD抓下來的:)
我看到那段也覺得怪怪的=口=
原來如此...我沒看清楚 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
佑、arro好,
回覆刪除這一題你們都正確。
但是,你們還是像上次用大數加減乘除那題的餘蔭一樣,你們用了之前的轉2進位的函數,這實在是沒必要。
這題只要一直除以2,將所有的餘數加起來就是了。(不管餘數是0還是1,反正加多少個0也沒關係)
熊掌好,
回覆刪除對吼,
餘1,答案就加1
又學到一招,謝老師