转义罗马数字

2020-03-15  本文已影响0人  韩小禹
package main

import "fmt"

func RomeToInt(s string) int {
    rome := map[string]int{
        "I": 1,
        "V": 5,
        "X": 10,
        "L": 50,
        "C": 100,
        "D": 500,
        "M": 1000,
    }

    strArr := []rune(s)
    len := len(strArr)
    if len == 1 {
        return rome[s]
    }

    sum := 0
    pre := rome[string(strArr[0])] //取得第一个字符对应的值
    for i := 1; i < len; i++ {
        next := rome[string(strArr[i])] //向后多取一位
        //判断当前位和后一位的大小,根据罗马规则,如果前一位大于后一位执行加法
        //如果前一位小于后一位执行减法
        if pre < next {
            sum -= pre
        } else {
            sum += pre
        }
        pre = next
    }
    sum += pre
    return sum
}

func main() {
    // s := "III"       //3
    // s := "IVIX"      //13
    s := "XVX" //15
    fmt.Println(RomeToInt(s))
}
上一篇下一篇

猜你喜欢

热点阅读