[進制轉換與計數] 輸入 1 個十進位整數 n,0 ≤ n ≤ 1,000,000,將其轉換為十
六進位表示法(以符號 0 ~ F 表示),請計算該十六進位表示法中,某十六進位符號
出現的次數。舉例來說,若輸入 n=851763,其十六進位表示為 CFF33,則其中十
六進位符號 F 出現 2 次,另一個十六進位符號 3 亦出現 2 次。
輸入/輸出說明:請在表單上建立 2 個 LABEL、3 個 TEXTBOX 及一個按鈕。第 1 個
LABEL 標示「輸入 n」,相對應的第 1 個 TEXTBOX 可以輸入一個整數 n,第 2 個 LABEL
標示「輸入十六進位符號」,相對應的第 2 個 TEXTBOX 可以輸入一個介於
{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F} 之間的十六進位符號(英文字母的部份大
寫),按下按鈕後,在第 3 個 TEXTBOX 中,輸出該十六進位符號在該十六進位數值
中出現的次數。程式執行順序:輸入 n,輸入十六進位符號,按下按鈕,輸出。



家豪版

這一版是相當傳統的基本動作,長除 16 即可。

Dim f0(15) As Integer
Dim k As Integer, n As Integer = Val(TextBox1.Text)
If (n > 1000000) Then
    MsgBox("n 超出範圍 0 <= n <= 1000000,請重新輸入。")
    Exit Sub
End If
TextBox3.Text = ""
Do While (n > 0) "計算每一數字的次數
    k = n Mod 16
    f0(k) += 1
    n \= 16
Loop
If (TextBox2.Text > "9") Then "超出 9 , 須把 A ~ F 轉成 10 ~ 15
    k = Asc(TextBox2.Text) - Asc("A") + 10
Else
    k = Val(TextBox2.Text)
End If
TextBox3.Text = f0(k)

這程式有防呆動做,輸入小寫可以轉大寫。
Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
If ((e.KeyChar >= "a") And (e.KeyChar <= "f")) Then
    e.KeyChar = StrConv(e.KeyChar, vbUpperCase) "小寫轉大寫
End If
e.Handled = Not (Char.IsDigit(e.KeyChar) Or e.KeyChar = Chr(8) Or ((e.KeyChar >= "A") And (e.KeyChar <= "F")))
End Sub

昊朋版

這一版相當簡潔,不過要了解 VB.net String 物件的 Replace 用法。
https://msdn.microsoft.com/zh-tw/library/fk49wtc1(v=vs.110).aspx

Dim sc() As Integer = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Dim n As Integer = Val(TextBox5.Text)
Do While (n > 0)
    sc(n Mod 16) += 1
    n \= 16
Loop
TextBox7.Text = sc(Val(TextBox6.Text _
.Replace("A", "10") _
.Replace("B", "11") _
.Replace("C", "12") _
.Replace("D", "13") _
.Replace("E", "14") _
.Replace("F", "15")))


黃翰版

此版與家豪版相同,雖然少了一些提升效率小動作,但基本工相當不錯。

Dim n As Integer = TextBox1.Text, count, x As Integer
Dim ch As Char = TextBox2.Text
Dim es_16 As String = "0123456789ABCDEF"
If n < 0 Or n > 1000000 Then
    MsgBox("n範圍在0~1000000,您已超出範圍")
    Exit Sub
End If
While n > 0
    x = n Mod 16
    n \= 16
    If ch = Mid(es_16, x + 1, 1) Then
        count += 1
    End If
End While
TextBox3.Text = count