From 5ffd8163f0ff1c6fb70cf8c3ac6e23383b59b08c Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Mon, 11 Dec 2023 11:47:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20super=20=E5=8C=85=E6=96=B0=E5=A2=9E=20N?= =?UTF-8?q?umberToRome=20=E5=87=BD=E6=95=B0=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=B0=86=E6=95=B4=E6=95=B0=E8=BD=AC=E4=B8=BA=E7=BD=97=E9=A9=AC?= =?UTF-8?q?=E6=95=B0=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/super/number.go | 12 ++++++++++++ utils/super/number_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 utils/super/number_test.go diff --git a/utils/super/number.go b/utils/super/number.go index 8bbd565..d719206 100644 --- a/utils/super/number.go +++ b/utils/super/number.go @@ -2,8 +2,20 @@ package super import "reflect" +var ( + romeThousands = []string{"", "M", "MM", "MMM"} + romeHundreds = []string{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"} + romeTens = []string{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"} + romeOnes = []string{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"} +) + // IsNumber 判断是否为数字 func IsNumber(v any) bool { kind := reflect.Indirect(reflect.ValueOf(v)).Kind() return kind >= reflect.Int && kind <= reflect.Float64 } + +// NumberToRome 将数字转换为罗马数字 +func NumberToRome(num int) string { + return romeThousands[num/1000] + romeHundreds[num%1000/100] + romeTens[num%100/10] + romeOnes[num%10] +} diff --git a/utils/super/number_test.go b/utils/super/number_test.go new file mode 100644 index 0000000..f31a76d --- /dev/null +++ b/utils/super/number_test.go @@ -0,0 +1,28 @@ +package super_test + +import ( + "github.com/kercylan98/minotaur/utils/super" + "testing" +) + +func TestNumberToRome(t *testing.T) { + tests := []struct { + input int + output string + }{ + {input: 1, output: "I"}, + {input: 5, output: "V"}, + {input: 10, output: "X"}, + {input: 50, output: "L"}, + {input: 100, output: "C"}, + {input: 500, output: "D"}, + {input: 1000, output: "M"}, + } + + for _, test := range tests { + result := super.NumberToRome(test.input) + if result != test.output { + t.Errorf("NumberToRome(%d) = %s; want %s", test.input, result, test.output) + } + } +}