-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathIntegerToRoman.js
More file actions
106 lines (100 loc) · 3.6 KB
/
Copy pathIntegerToRoman.js
File metadata and controls
106 lines (100 loc) · 3.6 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
"use strict"
/**
* @param {number} num
* @return {string}
*/
/**Results
* Runtime: 121 ms, faster than 90.14% of JavaScript online submissions for Integer to Roman.
* Memory Usage: 46.8 MB, less than 89.83% of JavaScript online submissions for Integer to Roman.
*/
var intToRoman = function (num) {
/**Pseudocode
* Parse number lowest to highest
* Convert to appropriate power of ten
* Apply to lookup table
* Append result onto head of table
*/
let result = "";
let number = 0;
let temp = 0;
//power stands for power of ten multiplier
for (let power = 0; num > 0; power++) {
number = num % 10; //get rightmost digit
number = number * 10 ** power; //multiply number by power of ten
num = Math.floor(num / 10) //remove rightmost digit from num
// matching true against the expressions in case or default if no match
switch (true) {
case "I":
case (number < 4):
for (let x = 0; x < number; x++) result = "I" + result;
break;
case (number === 4):
result = "IV";
break;
case (number < 9):
result = "V";
number = number - 5;
for (let x = 0; x < number; x++) result = result + "I";
break;
case (number === 9):
result = "IX";
break;
case (number < 40):
for (let x = 0; x < number / 10; x++) result = "X" + result;
break;
case (number === 40):
result = "XL" + result;
break;
case (number < 90):
temp = "L";
number = number - 50;
for (let x = 0; x < number / 10; x++) temp = temp + 'X';
result = temp + result;
break;
case (number === 90):
result = "XC" + result;
break;
case (number < 400):
for (let x = 0; x < number / 100; x++) result = "C" + result;
break;
case (number === 400):
result = "CD" + result;
break;
case (number < 900):
temp = "D";
number = number - 500;
for (let x = 0; x < number / 100; x++) temp = temp + "C";
result = temp + result;
break;
case (number === 900):
result = "CM" + result;
break;
case (number <= 3999):
for (let x = 0; x < number / 1000; x++) result = "M" + result;
break;
default:
console.log("Error!");
break;
}
}
return result;
};
(function () {
// console.log("III: " + intToRoman(3));
// console.log("IV: " + intToRoman(4));
// console.log("VIII: " + intToRoman(8));
// console.log("IX: " + intToRoman(9));
// console.log("XXXIII: " + intToRoman(33));
// console.log("X: " + intToRoman(10));
// console.log("LVIII: " + intToRoman(58));
// console.log("XCVIII: " + intToRoman(98));
// console.log("C: " + intToRoman(100));
// console.log("CCC: " + intToRoman(300));
// console.log("CDXCVII: " + intToRoman(497));
// console.log("CCCLI: " + intToRoman(351));
// console.log("D: " + intToRoman(500));
// console.log("XLIV: " + intToRoman(44));
// console.log("LXXXIV: " + intToRoman(84));
// console.log("DCCLXXXIV: " + intToRoman(784));
// console.log("MCMXCIV: " + intToRoman(1994));
})()