Skip to content

Commit 3c6b68f

Browse files
committed
Added task 12.
1 parent 0d064e2 commit 3c6b68f

File tree

2 files changed

+78
-0
lines changed

2 files changed

+78
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package s0012_integer_to_roman
2+
3+
class Solution {
4+
fun intToRoman(num: Int): String? {
5+
var num = num
6+
val sb = StringBuilder()
7+
val m = 1000
8+
val c = 100
9+
val x = 10
10+
val i = 1
11+
num = numerals(sb, num, m, ' ', ' ', 'M')
12+
num = numerals(sb, num, c, 'M', 'D', 'C')
13+
num = numerals(sb, num, x, 'C', 'L', 'X')
14+
numerals(sb, num, i, 'X', 'V', 'I')
15+
return sb.toString()
16+
}
17+
18+
private fun numerals(sb: StringBuilder, num: Int, one: Int, cTen: Char, cFive: Char, cOne: Char): Int {
19+
val div = num / one
20+
when (div) {
21+
9 -> {
22+
sb.append(cOne)
23+
sb.append(cTen)
24+
}
25+
8 -> {
26+
sb.append(cFive)
27+
sb.append(cOne)
28+
sb.append(cOne)
29+
sb.append(cOne)
30+
}
31+
7 -> {
32+
sb.append(cFive)
33+
sb.append(cOne)
34+
sb.append(cOne)
35+
}
36+
6 -> {
37+
sb.append(cFive)
38+
sb.append(cOne)
39+
}
40+
5 -> sb.append(cFive)
41+
4 -> {
42+
sb.append(cOne)
43+
sb.append(cFive)
44+
}
45+
3 -> {
46+
sb.append(cOne)
47+
sb.append(cOne)
48+
sb.append(cOne)
49+
}
50+
2 -> {
51+
sb.append(cOne)
52+
sb.append(cOne)
53+
}
54+
1 -> sb.append(cOne)
55+
else -> {
56+
}
57+
}
58+
return num - div * one
59+
}
60+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package s0012_integer_to_roman
2+
3+
import org.hamcrest.CoreMatchers.equalTo
4+
import org.hamcrest.MatcherAssert.assertThat
5+
6+
import org.junit.Test
7+
8+
class SolutionTest {
9+
@Test
10+
fun intToRoman() {
11+
val solution = Solution()
12+
assertThat(solution.intToRoman(3), equalTo("III"))
13+
assertThat(solution.intToRoman(4), equalTo("IV"))
14+
assertThat(solution.intToRoman(9), equalTo("IX"))
15+
assertThat(solution.intToRoman(58), equalTo("LVIII"))
16+
assertThat(solution.intToRoman(1994), equalTo("MCMXCIV"))
17+
}
18+
}

0 commit comments

Comments
 (0)