|
@@ -0,0 +1,119 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import "fmt"
|
|
|
+
|
|
|
+func main() {
|
|
|
+ var s string
|
|
|
+
|
|
|
+ s = "III"
|
|
|
+ fmt.Println(romanToInt(s))
|
|
|
+
|
|
|
+ s = "IV"
|
|
|
+ fmt.Println(romanToInt(s))
|
|
|
+
|
|
|
+ s = "IX"
|
|
|
+ fmt.Println(romanToInt(s))
|
|
|
+
|
|
|
+ s = "LVIII"
|
|
|
+ fmt.Println(romanToInt(s))
|
|
|
+
|
|
|
+ s = "MCMXCIV"
|
|
|
+ fmt.Println(romanToInt(s))
|
|
|
+
|
|
|
+ s = "DCXXI"
|
|
|
+ fmt.Println(romanToInt(s))
|
|
|
+}
|
|
|
+
|
|
|
+var roman = map[byte]int{
|
|
|
+ 'I': 1,
|
|
|
+ 'V': 5,
|
|
|
+ 'X': 10,
|
|
|
+ 'L': 50,
|
|
|
+ 'C': 100,
|
|
|
+ 'D': 500,
|
|
|
+ 'M': 1000,
|
|
|
+}
|
|
|
+
|
|
|
+var special = map[byte]bool{
|
|
|
+ 'I': true,
|
|
|
+ 'X': true,
|
|
|
+ 'C': true,
|
|
|
+}
|
|
|
+
|
|
|
+func romanToInt(s string) int {
|
|
|
+ var sum, i int
|
|
|
+ var mark byte = 'N'
|
|
|
+ for i = 0; i < len(s); i++ {
|
|
|
+ if mark == 'N' {
|
|
|
+ switch s[i] {
|
|
|
+ case 'I':
|
|
|
+ mark = 'I'
|
|
|
+ case 'V':
|
|
|
+ sum += 5
|
|
|
+ case 'X':
|
|
|
+ mark = 'X'
|
|
|
+ case 'L':
|
|
|
+ sum += 50
|
|
|
+ case 'C':
|
|
|
+ mark = 'C'
|
|
|
+ case 'D':
|
|
|
+ sum += 500
|
|
|
+ case 'M':
|
|
|
+ sum += 1000
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ tmpMark := mark
|
|
|
+ mark = 'N'
|
|
|
+ switch tmpMark {
|
|
|
+ case 'I':
|
|
|
+ switch s[i] {
|
|
|
+ case 'V':
|
|
|
+ sum += 4
|
|
|
+ case 'X':
|
|
|
+ sum += 9
|
|
|
+ default:
|
|
|
+ sum += roman[tmpMark]
|
|
|
+ if special[s[i]] {
|
|
|
+ mark = s[i]
|
|
|
+ } else {
|
|
|
+ sum += roman[s[i]]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case 'X':
|
|
|
+ switch s[i] {
|
|
|
+ case 'L':
|
|
|
+ sum += 40
|
|
|
+ case 'C':
|
|
|
+ sum += 90
|
|
|
+ default:
|
|
|
+ sum += roman[tmpMark]
|
|
|
+ if special[s[i]] {
|
|
|
+ mark = s[i]
|
|
|
+ } else {
|
|
|
+ sum += roman[s[i]]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case 'C':
|
|
|
+ switch s[i] {
|
|
|
+ case 'D':
|
|
|
+ sum += 400
|
|
|
+ case 'M':
|
|
|
+ sum += 900
|
|
|
+ default:
|
|
|
+ sum += roman[tmpMark]
|
|
|
+ if special[s[i]] {
|
|
|
+ mark = s[i]
|
|
|
+ } else {
|
|
|
+ sum += roman[s[i]]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //fmt.Println("sum current is ", sum)
|
|
|
+ }
|
|
|
+ //fmt.Println("sum is ", sum)
|
|
|
+ if mark != 'N' {
|
|
|
+ sum += roman[mark]
|
|
|
+ }
|
|
|
+ return sum
|
|
|
+}
|