kotlin实现罗马数字和阿拉伯数字转换

原创 2015年07月08日 22:00:39

1.罗马数字转阿拉伯数字

遍历罗马数字的每一位,若当前位比前一位小,则在结果中加上当前位

否则在结果中减去前一位的两倍再加上当前位


2.阿拉伯数字转罗马数字

先构造map

mapOf(1000 to "M",900 to "CM",500 to "D",400 to "CD",100 to "C",90 to "XC",50 to "L",40 to "XL",10 to "X",9 to "IX",5 to "V",4 to "IV",1 to "I")
遍历map

若当前数字大于第i个数字

将第i个数字对应的字母加入结果中,当前数字-=第i个数字

val romeChar=mapOf(
        'I' to 1,
        'V' to 5,
        'X' to 10,
        'L' to 50,
        'C' to 100,
        'D' to 500,
        'M' to 1000
)


class RomeNumber private constructor(){
    constructor(number:String):this(){
        this.number=number
    }
    var number:String=""
        set(value){
            if(value.toCharList().any{!romeChar.containsKey(it)}) throw object :Exception("It is not a legal Rome Number"){ } else $number=value.toUpperCase()
        }
    public fun toArabicNumber():Int{
        var lastNumber=0
        var sum=0
        number.toCharList().forEach {
            var value:Int?=romeChar.get(it)
            if (value!!>lastNumber) {sum-=lastNumber*2;sum+=value;}else sum+=value
            lastNumber=value
        }
        return sum
    }

    override fun toString(): String {
        return number
    }
}


fun Int.toRomeNumber():RomeNumber{
    val additionMap = mapOf(1000 to "M",900 to "CM",500 to "D",400 to "CD",100 to "C",90 to "XC",50 to "L",40 to "XL",10 to "X",9 to "IX",5 to "V",4 to "IV",1 to "I")
    val sb=StringBuilder()
    var temp=this
    while (temp != 0) {
        additionMap.forEach {
            while (temp >= it.getKey()) {
                sb.append(it.getValue())
                temp -= it.getKey()
            }
        }
    }
    return RomeNumber(sb.toString())
}


Leetcode#13. Roman to Integer (罗马数字转化阿拉伯数字)

xuna小记:题目解法使用c++和Python两种,重点侧重在于解题思路和如何将解法用python语言实现。题目Given a roman numeral, convert it to an inte...
  • xunalove
  • xunalove
  • 2017年08月29日 12:02
  • 330

罗马数字转换为阿拉伯数字

这篇帖子我提供了一个将几千以内的罗马数字,转换成阿拉伯数字的JS方法。 对于这种转化,我认为只要注意罗马数字的两个特性: 1.连写的数字重复不得超过三次,比方说要表示4,就不能是IIII,而应该是...
  • esir82
  • esir82
  • 2017年02月03日 15:26
  • 966

罗马数字和阿拉伯数字互化<java实现>

最近迷上了守望先锋,脑子一天不如一天,满脑子都是骚操作,所以闲的时候做一些ACM题目having some intellectual fun。然后就看到了这个:实现罗马数字与阿拉伯数字的互换。主要涉及...
  • Geek_Geeker
  • Geek_Geeker
  • 2016年11月21日 22:30
  • 357

送给大家一个把阿拉伯数字与罗马数字互换的代码 -.- 仅支持4000以下的转化

阿拉伯数字与罗马数字互换
  • leibniz_zhang
  • leibniz_zhang
  • 2016年06月04日 08:55
  • 1234

python实现阿拉伯数字和罗马数字的互相转换

题目很简单,如果之前也做过这种题目的话,相信对于什么是罗马数字就不会很陌生了,罗马数字是很古老的计数方法,现在的一些地方还有见到它的使用,下面简单贴两张维基百科的图片简单回顾一下罗马数字: ...
  • Together_CZ
  • Together_CZ
  • 2017年08月05日 16:43
  • 1837

leetcode 罗马数字与整数的转换算法

leecode 罗马数字与整数的转换算法
  • net_wolf_007
  • net_wolf_007
  • 2016年06月27日 18:01
  • 3852

将阿拉伯数组转换成为罗马数字

将大于0小于1000的阿拉伯数字转换为罗马数字。阿拉伯数字与罗马数字的对应关系如下: 1 2 3 4 5 …… I II III IV V …… *问题分析与算法设计 题目中给出了阿拉伯数字与罗马...
  • u010196984
  • u010196984
  • 2013年04月17日 14:18
  • 886

罗马数字转换为十进制数字

给定一个罗马数字s,( I
  • u010002184
  • u010002184
  • 2016年02月25日 18:39
  • 1188

将阿拉伯数字转换为罗马数字

 将阿拉伯数字转换为罗马数字将大于0小于1000的阿拉伯数字转换为罗马数字。阿拉伯数字与罗马数字的对应关系如下: *问题分析与算法设计题目中给出了阿拉伯数字与罗马数字的对应关系,题中的数字转换实际上就...
  • xxyakoo
  • xxyakoo
  • 2008年11月11日 22:06
  • 992

罗马数字与阿拉伯数字的相互转化

题目 1 Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range ...
  • cjsh_123456
  • cjsh_123456
  • 2017年10月16日 14:01
  • 145
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:kotlin实现罗马数字和阿拉伯数字转换
举报原因:
原因补充:

(最多只允许输入30个字)