美文网首页
转义罗马数字

转义罗马数字

作者: 韩小禹 | 来源:发表于2020-03-15 00:18 被阅读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))
    }
    

    相关文章

      网友评论

          本文标题:转义罗马数字

          本文链接:https://www.haomeiwen.com/subject/yaeashtx.html