Skip to content

Commit 56ccbfc

Browse files
authored
chore: merge "Added DecimalToRoman" (TheAlgorithms#707)
* Added DecimalToRoman * add explanation * added test
1 parent 3a87d49 commit 56ccbfc

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

Conversions/DecimalToRoman.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
Decimal To Roman
3+
4+
This algorithm take decimal number and convert to roman numeral according to standard form (https://en.wikipedia.org/wiki/Roman_numerals#Description)
5+
6+
Algorithm & Explanation : https://www.rapidtables.com/convert/number/how-number-to-roman-numerals.html
7+
*/
8+
9+
const values = {
10+
M: 1000,
11+
CM: 900,
12+
D: 500,
13+
CD: 400,
14+
C: 100,
15+
XC: 90,
16+
L: 50,
17+
XL: 40,
18+
X: 10,
19+
IX: 9,
20+
V: 5,
21+
IV: 4,
22+
I: 1
23+
}
24+
25+
const orders = [
26+
'M',
27+
'CM',
28+
'D',
29+
'CD',
30+
'C',
31+
'XC',
32+
'L',
33+
'XL',
34+
'X',
35+
'IX',
36+
'V',
37+
'IV',
38+
'I'
39+
]
40+
41+
function decimalToRoman (num) {
42+
let roman = ''
43+
for (var symbol of orders) {
44+
while (num >= values[symbol]) {
45+
roman += symbol
46+
num -= values[symbol]
47+
}
48+
}
49+
return roman
50+
}
51+
52+
export { decimalToRoman }
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { decimalToRoman } from '../DecimalToRoman'
2+
3+
describe('decimalToRoman', () => {
4+
it('expects to return correct roman numeral of given number', () => {
5+
expect(decimalToRoman(34)).toBe('XXXIV')
6+
})
7+
it('expects to return correct roman numeral of given number', () => {
8+
expect(decimalToRoman(28)).toBe('XXVIII')
9+
})
10+
it('expects to return correct roman numeral of given number', () => {
11+
expect(decimalToRoman(2021)).toBe('MMXXI')
12+
})
13+
})

0 commit comments

Comments
 (0)