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)
})