1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| object RomaToNum { def main(args: Array[String]): Unit = { println(solution1(3)) println(solution1(4)) println(solution1(9)) println(solution1(58)) println(solution1(1994))
println(solution2(3)) println(solution2(4)) println(solution2(9)) println(solution2(58)) println(solution2(1994)) }
def solution1(num: Int): String = { val map = Map(1 -> "I", 4 -> "IV", 5 -> "V", 9 -> "IX", 10 -> "X", 50 -> "L", 40 -> "XL", 90 -> "XC", 100 -> "C", 400 -> "CD", 500 -> "D", 900 -> "CM", 1000 -> "M") var res = "" if (num < 1 || num > 3999) { return null }
var numT = num var i = 0 while (numT != 0) { val bit = numT % 10 if (bit != 0) { val factor = Math.pow(10, i).toInt val target = bit * factor val base = map.get(factor).get val transTarget = bit match { case 1 => base case 2 => base + base case 3 => base + base + base case 4 => map.get(target).get case 5 => map.get(target).get case 6 => map.get(factor * 5).get + base case 7 => map.get(factor * 5).get + base + base case 8 => map.get(factor * 5).get + base + base + base case 9 => map.get(target).get } res = transTarget + res } i += 1 numT = numT / 10 } res }
def solution2(num: Int): String = { val first = List("", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX") val second = List("", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC") val third = List("", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM") val fourth = List("", "M", "MM", "MMM")
fourth(num / 1000) + third((num / 100) % 10) + second((num / 10) % 10) + first(num % 10) }
}
|