123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package main
- import (
- "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))
- } */
|