| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | package mainimport (	"bytes"	"math")var mRoman = map[float64]rune{	1:    'I',	5:    'V',	10:   'X',	50:   'L',	100:  'C',	500:  'D',	1000: 'M',}func digitToRoman(pos, digit int) []rune {	res := make([]rune, 0)	base := math.Pow10(pos)	switch digit {	case 0:	case 1:		fallthrough	case 2:		fallthrough	case 3:		for i := 0; i < digit; i++ {			res = append(res, mRoman[base])		}	case 4:		res = append(res, mRoman[base], mRoman[base*5])	case 5:		fallthrough	case 6:		fallthrough	case 7:		fallthrough	case 8:		res = append(res, mRoman[base*5])		for i := 5; i < digit; i++ {			res = append(res, mRoman[base])		}	case 9:		res = append(res, mRoman[base], mRoman[base*10])	default:	}	return res}func intToRomanOld(num int) string {	res := make([]rune, 0)	for i := 0; num != 0; i, num = i+1, num/10 {		roman := digitToRoman(i, num%10)		res = append(roman, res...)	}	return string(res)}var roman = [4][10]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"},}func intToRoman(num int) string {	var res bytes.Buffer	res.WriteString(roman[3][num/1000])	res.WriteString(roman[2][num%1000/100])	res.WriteString(roman[1][num%100/10])	res.WriteString(roman[0][num%10])	return res.String()}/* func main() {	fmt.Println(intToRoman(1998))} */
 |