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

本文介绍了如何使用Kotlin进行罗马数字与阿拉伯数字的转换。首先,详细阐述了罗马数字转阿拉伯数字的过程,通过遍历罗马数字的每一位并比较大小来计算结果。接着,讨论了阿拉伯数字转罗马数字的方法,通过建立映射关系,判断当前数字与罗马数字对应值的关系来构建转换结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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())
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值