mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-06 01:18:23 +08:00
chore: merge "Added DecimalToRoman" (#707)
* Added DecimalToRoman * add explanation * added test
This commit is contained in:
52
Conversions/DecimalToRoman.js
Normal file
52
Conversions/DecimalToRoman.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
Decimal To Roman
|
||||||
|
|
||||||
|
This algorithm take decimal number and convert to roman numeral according to standard form (https://en.wikipedia.org/wiki/Roman_numerals#Description)
|
||||||
|
|
||||||
|
Algorithm & Explanation : https://www.rapidtables.com/convert/number/how-number-to-roman-numerals.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
const values = {
|
||||||
|
M: 1000,
|
||||||
|
CM: 900,
|
||||||
|
D: 500,
|
||||||
|
CD: 400,
|
||||||
|
C: 100,
|
||||||
|
XC: 90,
|
||||||
|
L: 50,
|
||||||
|
XL: 40,
|
||||||
|
X: 10,
|
||||||
|
IX: 9,
|
||||||
|
V: 5,
|
||||||
|
IV: 4,
|
||||||
|
I: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const orders = [
|
||||||
|
'M',
|
||||||
|
'CM',
|
||||||
|
'D',
|
||||||
|
'CD',
|
||||||
|
'C',
|
||||||
|
'XC',
|
||||||
|
'L',
|
||||||
|
'XL',
|
||||||
|
'X',
|
||||||
|
'IX',
|
||||||
|
'V',
|
||||||
|
'IV',
|
||||||
|
'I'
|
||||||
|
]
|
||||||
|
|
||||||
|
function decimalToRoman (num) {
|
||||||
|
let roman = ''
|
||||||
|
for (var symbol of orders) {
|
||||||
|
while (num >= values[symbol]) {
|
||||||
|
roman += symbol
|
||||||
|
num -= values[symbol]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return roman
|
||||||
|
}
|
||||||
|
|
||||||
|
export { decimalToRoman }
|
13
Conversions/test/DecimalToRoman.test.js
Normal file
13
Conversions/test/DecimalToRoman.test.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { decimalToRoman } from '../DecimalToRoman'
|
||||||
|
|
||||||
|
describe('decimalToRoman', () => {
|
||||||
|
it('expects to return correct roman numeral of given number', () => {
|
||||||
|
expect(decimalToRoman(34)).toBe('XXXIV')
|
||||||
|
})
|
||||||
|
it('expects to return correct roman numeral of given number', () => {
|
||||||
|
expect(decimalToRoman(28)).toBe('XXVIII')
|
||||||
|
})
|
||||||
|
it('expects to return correct roman numeral of given number', () => {
|
||||||
|
expect(decimalToRoman(2021)).toBe('MMXXI')
|
||||||
|
})
|
||||||
|
})
|
Reference in New Issue
Block a user