From c574f3a505d9515e8988b78ddd2f410f0bbad190 Mon Sep 17 00:00:00 2001 From: Openset Date: Sun, 30 Dec 2018 14:04:07 +0800 Subject: [PATCH] Add: integer_to_roman --- problems/integer-to-roman/integer_to_roman.go | 13 +++++ .../integer-to-roman/integer_to_roman_test.go | 52 +++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/problems/integer-to-roman/integer_to_roman.go b/problems/integer-to-roman/integer_to_roman.go index 4b828f21e..55ba3625d 100644 --- a/problems/integer-to-roman/integer_to_roman.go +++ b/problems/integer-to-roman/integer_to_roman.go @@ -1 +1,14 @@ package integer_to_roman + +func intToRoman(num int) string { + base := [...]int{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1} + bs := [...]string{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"} + ans := "" + for i, b := range base { + for num/b > 0 { + ans += bs[i] + num -= b + } + } + return ans +} diff --git a/problems/integer-to-roman/integer_to_roman_test.go b/problems/integer-to-roman/integer_to_roman_test.go index 4b828f21e..a68b06494 100644 --- a/problems/integer-to-roman/integer_to_roman_test.go +++ b/problems/integer-to-roman/integer_to_roman_test.go @@ -1 +1,53 @@ package integer_to_roman + +import "testing" + +type caseType struct { + input int + expected string +} + +func TestIntToRoman(t *testing.T) { + tests := [...]caseType{ + { + input: 3, + expected: "III", + }, + { + input: 4, + expected: "IV", + }, + { + input: 9, + expected: "IX", + }, + { + input: 20, + expected: "XX", + }, + { + input: 58, + expected: "LVIII", + }, + { + input: 1994, + expected: "MCMXCIV", + }, + { + input: 11111, + expected: "MMMMMMMMMMMCXI", + }, + } + for _, tc := range tests { + output := intToRoman(tc.input) + if output != tc.expected { + t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected) + } + } +} + +func BenchmarkIntToRoman(b *testing.B) { + for i := 0; i < b.N; i++ { + intToRoman(111111) + } +}