美文网首页
12. Integer to Roman 整数转罗马数字

12. Integer to Roman 整数转罗马数字

作者: sarto | 来源:发表于2022-03-14 11:21 被阅读0次

    题目

    罗马数字由 7 个不同的符号表示

    解析

    罗马数字也是一种 10 进制的表示方法,只是有一些特殊处理。将整数转换为罗马数字,主要是对每个 10 进制位找到其正确的编码方法。

    伪码

    map[int]string = {1:I ... 1000:M}
    base = 1000
    rst=""
    for x != 0 {
      quo = x / base
      switch quo
      case =4
      case =5
      case =9
      case <4
      case >5
     x = x %base
    }
    

    代码

    func intToRoman(num int) string {
        m := map[int]string{
            1:"I",
            5:"V",
            10:"X",
            50:"L",
            100:"C",
            500:"D",
            1000:"M",
        }
        
        var s string
        base := 1
        for ;num != 0; {
            rem := num % 10
            switch{
            case rem == 4:
                s = m[base] + m[5*base] + s
            case rem == 5:
                s = m[5*base] + s
            case rem == 9:
                s = m[base] + m[10*base] + s
            case rem < 4 || rem > 5:
                var ts string
                if rem > 5 {
                    ts = m[5*base]
                    rem = rem - 5
                }
                for i:=0; i<rem; i++ {
                    ts += m[base]
                }
                s = ts + s
            }
            num = num / 10
            base = base*10
        }
        return s
    }
    

    总结

    1. 最后的 rem < 4 || rem > 5 时,字符串前后位置要写好
    2. num 总是在和 10 做余数判断,仅在取数值时才采用 base
    3. 代码从低位到高位,伪代码从高位到低位,很明显从低到高好一些

    相关文章

      网友评论

          本文标题:12. Integer to Roman 整数转罗马数字

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