-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnumbering_format.go
More file actions
51 lines (46 loc) · 1010 Bytes
/
numbering_format.go
File metadata and controls
51 lines (46 loc) · 1010 Bytes
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
package main
import (
"fmt"
"strings"
)
type romanPair struct {
Value int
Symbol string
}
var romanNumerals = []romanPair{
{1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},
{100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},
{10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"},
}
func formatNumber(number int, formatType string) string {
switch formatType {
case "decimal":
return fmt.Sprintf("%d", number)
case "upperRoman":
return toRoman(number)
case "lowerRoman":
return strings.ToLower(toRoman(number))
case "upperLetter":
if number >= 1 && number <= 26 {
return string('A' + number - 1)
}
case "lowerLetter":
if number >= 1 && number <= 26 {
return string('a' + number - 1)
}
}
return fmt.Sprintf("%d", number)
}
func toRoman(number int) string {
if number <= 0 {
return ""
}
var result strings.Builder
for _, pair := range romanNumerals {
for number >= pair.Value {
result.WriteString(pair.Symbol)
number -= pair.Value
}
}
return result.String()
}