From 2d0d4ecb95c4affde7dd321fce3e3ac51c970208 Mon Sep 17 00:00:00 2001 From: AkifhanIlgaz Date: Wed, 4 Jan 2023 21:36:53 +0300 Subject: [PATCH] Create: 0012-integer-to-roman.rs / .ts --- rust/0012-integer-to-roman.rs | 20 +++++++++++++++++++ typescript/0012-integer-to-roman.ts | 31 +++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 rust/0012-integer-to-roman.rs create mode 100644 typescript/0012-integer-to-roman.ts diff --git a/rust/0012-integer-to-roman.rs b/rust/0012-integer-to-roman.rs new file mode 100644 index 000000000..8a81532cd --- /dev/null +++ b/rust/0012-integer-to-roman.rs @@ -0,0 +1,20 @@ +impl Solution { + pub fn int_to_roman(num: i32) -> String { + let int = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]; + let roman = [ + "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I", + ]; + let mut result = String::new(); + let mut num = num; + + for i in 0..13 { + if num / int[i] > 0 { + let count = num / int[i]; + result.push_str(&roman[i].repeat(count as usize)); + num %= int[i]; + } + } + + result + } +} diff --git a/typescript/0012-integer-to-roman.ts b/typescript/0012-integer-to-roman.ts new file mode 100644 index 000000000..5d68ff148 --- /dev/null +++ b/typescript/0012-integer-to-roman.ts @@ -0,0 +1,31 @@ +function intToRoman(num: number): string { + const map = { + 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, + }; + + let result = ''; + + for (let key in map) { + const repeatCounter = Math.floor(num / map[key]); + + if (repeatCounter !== 0) result += key.repeat(repeatCounter); + + num %= map[key]; + + if (num == 0) return result; + } + + return result; +}