2011年6月24日 星期五

任意進位轉任意進位

輸入說明:

輸入可能有無限多行
輸入 a,b,c 。a為原進位,b為目標進位,c為原數 (1 ≦ a ≦ 36)&(1 ≦ b ≦ 36)

輸入範例:
10 2 81
8 3 52
9 5 97
2 6 100
6 8 64
8 9 85
9 15 69
9 16 168
8 32 648
2 36 1000
16 10 4EB

輸出範例:
1010001
1120
323
4
50
76
43
8F
D8
8
1259

2 則留言:

  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
    Do While Not EOF(1)
    Input #1, A, B
    Line Input #1, C
    turn = any_to_ten(A, C)
    Print #2, ten_to_any(B, turn)

    Loop
    Close #2
    Close #1
    End
    End Sub

    Function ten_to_any(A, ByVal B)
    Dim ans As String, C() As String
    ans = ""
    C = Split("0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z")
    Do
    x = B Mod A
    ans = C(x) & ans
    B = B \ A
    Loop Until B = 0
    ten_to_any = ans
    End Function

    Function any_to_ten(A, B)
    Dim ans As Long, C As String
    C = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    D = 0
    For i = Len(B) To 1 Step -1
    ans = ans + ((InStr(C, Mid(B, i, 1)) - 1) * (A ^ D))
    D = D + 1
    Next i
    any_to_ten = ans
    End Function

    回覆刪除
  2. 佑好,
    題目設計的不錯,程式也正確。
    any_to_ten那邊的寫法,還可以改進。
    你是從最右邊算起,其實也可以從左邊算起的。想一下。

    回覆刪除