数字转成罗马数字(整数转罗马数字)
数字转成罗马数字(整数转罗马数字)} { "" "M" "MM" "MMM" }//1000-3000的整千数 { "" "I" "II" "III" "IV" "V" "VI" "VII" "VIII" "IX" } //1-9 { "" "X" "XX" "XXX" "XL" "L" "LX" "LXX" "LXXX" "XC" } //10-90的整十数 { "" "C
2021-09-13:整数转罗马数字。
福大大 答案2021-09-13:
构造一张罗马数字的二维表。
{
{ "" "I" "II" "III" "IV" "V" "VI" "VII" "VIII" "IX" } //1-9
{ "" "X" "XX" "XXX" "XL" "L" "LX" "LXX" "LXXX" "XC" } //10-90的整十数
{ "" "C" "CC" "CCC" "CD" "D" "DC" "DCC" "DCCC" "CM" } //100-900的整百数
{ "" "M" "MM" "MMM" }//1000-3000的整千数
}
根据二维表,将整数从左往右,直接替换就行。0是虚无,所以二维表里,0对应的罗马数字是空。
时间复杂度:数字不会太大,近似认为是O(1)。
时间复杂度:数字不会太大,近似认为是O(1)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
num := 123
ret := intToRoman(num)
fmt.Println(ret)
}
func intToRoman(num int) string {
c := [][]string{
{"" "I" "II" "III" "IV" "V" "VI" "VII" "VIII" "IX"}
{"" "X" "XX" "XXX" "XL" "L" "LX" "LXX" "LXXX" "XC"}
{"" "C" "CC" "CCC" "CD" "D" "DC" "DCC" "DCCC" "CM"}
{"" "M" "MM" "MMM"}}
roman := make([]byte 0)
roman = append(roman []byte(c[3][num/1000])...)
roman = append(roman []byte(c[2][num/100])...)
roman = append(roman []byte(c[1][num/10])...)
roman = append(roman []byte(c[0][num])...)
return string(roman)
}
执行结果如下:
***
[左神java代码](https://github.com/algorithmzuo/coding-for-great-offer/blob/main/src/class28/Problem_0012_IntegerToRoman.java)