1. 问题描述
给定一个罗马数字,将其转换为整数,要求返回结果的取值为1~3999。
2. 问题示例
Ⅳ→4,Ⅻ→12,ⅩⅪ→21,XCVI→99。
3. 代码实现
def roman_to_int(s):roman_map = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}prev_value = 0result = 0for i in range(len(s) - 1, -1, -1):if roman_map[s[i]] < prev_value:result -= roman_map[s[i]]else:result += roman_map[s[i]]prev_value = roman_map[s[i]]return resultprint(roman_to_int("IV")) # 输出4
print(roman_to_int("XII")) # 输出12
print(roman_to_int("XXI")) # 输出21
print(roman_to_int("XCVI")) # 输出99
# roman_to_int 函数通过遍历罗马数字字符串并根据对应规则进行数值累加或减去,
# 最终得到转换后的整数。
要将罗马数字转换为整数,可以遵循如下的规则:
- 创建一个字典,包含罗马数字和对应的整数值。
- 从左到右遍历罗马数字,如果当前的数字比下一个数字小,则减去当前数字;否则,加上当前数字。
def roman_to_int(s):roman_dict = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}result = 0prev_value = 0for char in s:curr_value = roman_dict[char]if curr_value > prev_value:result += curr_value - 2 * prev_valueelse:result += curr_valueprev_value = curr_valuereturn resultprint("IV →", roman_to_int("IV"))
print("XII →", roman_to_int("XII"))
print("XXI →", roman_to_int("XXI"))
print("XCVI →", roman_to_int("XCVI"))
# 首先创建了一个罗马数字和整数值对应的字典。
# 然后,我们遍历给定的罗马数字,根据规则进行加减操作,最终得到转换后的整数值。