Skip to content

13. 罗马数字转整数

13. 罗马数字转整数

代码

javascript
// 输入:"MMMDCCXLIX"
// 输出:3749

export function romanToInt(s) {
  const list = [["M", 1000], ["CM", 900], ["D", 500], ["CD", 400], ["C", 100], ["XC", 90], ["L", 50], ["XL", 40], ["X", 10], ["IX", 9], ["V", 5], ["IV", 4], ["I", 1]]
  let res = 0
  for (const [rom, int] of list) {
    while (s.startsWith(rom)) {
      s = s.replace(rom, '')
      res += int
    }
  }
  return res
}
typescript
// 输入:"MMMDCCXLIX"
// 输出:3749

export function romanToInt(s: string): number {
  const list: [string, number][] = [["M", 1000], ["CM", 900], ["D", 500], ["CD", 400], ["C", 100], ["XC", 90], ["L", 50], ["XL", 40], ["X", 10], ["IX", 9], ["V", 5], ["IV", 4], ["I", 1]]
  let res = 0
  for (const [rom, int] of list) {
    while (s.startsWith(rom)) {
      s = s.replace(rom, '')
      res += int
    }
  }
  return res
}

测试代码

ts
import { expect, test } from 'vitest'
import { romanToInt } from './typescript.ts'
import { romanToInt as romanToIntJs } from './javascript.js'

test(`MMMDCCXLIX`, () => {
  expect(romanToInt('MMMDCCXLIX')).toBe(3749)
})

test(`MMMDCCXLIX`, () => {
  expect(romanToIntJs('MMMDCCXLIX')).toBe(3749)
})