設計一程式可將最長含10個字元的字串讀入, 每一個字元均代表某一數值的羅馬數表示法。將讀入之羅馬數及其相對應之阿拉伯數一起列印出來。
【壹】 羅馬數和字元之對應表如下:
M 1000
D 500
C 100
L 50
X 10
V 5
I 1
你的輸入有下列幾組:
(1) VII
(2) LXXXVII
(3) CCXIX
(4) MCCCLIV
(5) MMDCLXXIII
(6) MCDLXXVI
Dim Roma(11) As Integer
回覆刪除Private Sub Form_Load()
Open App.Path & "/in.txt" For Input As #1
Open App.Path & "/out.txt" For Output As #2
k = 1
Do While Not EOF(1)
Input #1, n
For i = 5 To Len(n)
X = Mid(n, i, 1)
Select Case X
Case "M"
Roma(k) = Roma(k) + 1000
Case "D"
Roma(k) = Roma(k) + 500
Case "C"
Roma(k) = Roma(k) + 100
Case "L"
Roma(k) = Roma(k) + 50
Case "X"
Roma(k) = Roma(k) + 10
Case "V"
Roma(k) = Roma(k) + 5
Case "I"
Roma(k) = Roma(k) + 1
End Select
Next i
Print #2, Roma(k)
k = k + 1
Loop
Close #2
Close #1
End Sub
輸入:
(1) VII
(2) LXXXVII
(3) CCXIX
(4) MCCCLIV
(5) MMDCLXXIII
(6) MCDLXXVI
輸出:
7
87
221
1356
2673
1676
方法一樣是用習慣的字串式處理
雖然好像不太好
但是因為習慣所以做起來快多了
Private Sub Form_Load()
回覆刪除Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, X
For w = 1 To Len(X)
q = Mid(X, w, 1)
Select Case q
Case "M"
ans = ans + 1000
Case "D"
ans = ans + 500
Case "C"
ans = ans + 100
Case "L"
ans = ans + 50
Case "X"
ans = ans + 10
Case "V"
ans = ans + 5
Case "I"
ans = ans + 1
End Select
Next w
Print #2, ans
Close #1
Close #2
End Sub
老師 我有個疑問@@
假設
w="zzxx"
t=mid(w,1,1)
z=100
那麼有捨嚜辦法 能印出來 把T變成100嗎
Private Sub Form_Load()
回覆刪除Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
While Not EOF(1)
Input #1, x
n = Len(x)
ans = 0: k = ""
For i = 1 To n
k = Mid(x, i, 1)
Select Case k
Case "M"
ans = ans + 1000
Case "D"
ans = ans + 500
Case "C"
ans = ans + 100
Case "L"
ans = ans + 50
Case "X"
ans = ans + 10
Case "V"
ans = ans + 5
Case "I"
ans = ans + 1
End Select
Next i
Print #2, ans
Wend
Close #1
Close #2
End Sub
高仔好,
回覆刪除1.依題意,你的程式是對的。這題也似乎適合用字串吧。
2.只是,羅馬數字中,依我從我的老師那兒學到的,除了用加法之外,還有「減法」的部分,像是「VII」是7,但是「IIV」是3。不過,這題目中,似乎不想說這個部分,那就算了。
Y揚好,
1.你的程式是對的,但是,你的輸入設定上...,似乎又有些不同了吧。你是當成只有一行的內容吧?
2.你的問題的第1行執行後,第2行執行後,t是"z"。
然後,你想讓if t="z" then t=100,這個意思嗎?
如果是,那直接就可以執行了啊,只要你的t一開始沒特別定義成什麼特定的資料型態就可以變了。
上個星期看了今年初的技藝競賽的會議資料,有三個需要注意的內容。
1.這個程式設計比賽,有學科的。所以,來去找找以往的學科內容,或是,找找相關的題庫。
2.某個學校的選手,在解題時,多設了個結束的命令鈕,結果還是0分,這個可就搞笑了。因為,像我們這樣一路寫來的程式,的確是要再去按一次停止,才會程式結束,有選手多寫了個命令按鈕來做結束end而已,還是得到0分。小心啊,選手們。
3.有學校提到,目前用的是vb6,但是外頭(?)用的是vb8(?),建議更改。這...這...還真得注意啊。目前還沒有更改的意思,如果更改也會從所謂的「下一屆」才有可能吧。
阿瑋好,
回覆刪除怪怪的,怎麼沒看到你的程式,在我的post之前呢?
(時間差)
程式ok,輸入設定也ok。
(設定成有可能有好多組輸入的)
Dim Rnum(7) As Integer
回覆刪除Private Sub Form_Load()
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, strQ
ans = 0
For j = Len(strQ) To 1 Step -1
q = Mid(strQ, j, 1)
Select Case q
Case "I"
ans = ans + 1
Case "V"
ans = ans + 5
Case "X"
ans = ans + 10
Case "L"
ans = ans + 50
Case "C"
ans = ans + 100
Case "D"
ans = ans + 500
Case "M"
ans = ans + 1000
Case " "
Print #2, ans
Exit For
End Select
Next j
Loop
Close #2
Close #1
End Sub
不好意思請問一下各位
回覆刪除如果小弟現在想要做的題目是由數字轉羅馬字
那方法是不是會差很多
該如何做呢?
方法似乎沒太大差別,就只是反過來而已!
回覆刪除但羅馬數字有個規則,似乎是數字小的在數字大的前面為減,例如 IV 是 5-1 =4 而非5+1=6。
最多應該就是只有加3次數字小的,例如 VIII = 8 而 IX =9!
加油!