罗马数字转换的几种方法 python123平台
题目要求:
将一个罗马数字转换成十进制整数输出,其中,罗马数字的范围为1~3999。
组合规则如下:
(1) 基本数字 I、X 、C 连用构成数字,或者放在大数的右边连用构成数字,但连用不能超过三个;放在大数的左边只能用一个。
(2) 基本数字 V 、L 、D不能作为小数放在大数符号的左边构成数目,放在大数右边只能使用一个。
输入格式:输入为一个罗马数字字符串,均为合法罗马字母。
输出格式:输出一个十进制整数,它是罗马数字对应的阿拉伯数字。
百度的转换解释:
只用管前三个条件就可以了
例如:输入:VII
输出:7
方法一:
chart = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
strs = input("")
result = 0
omit = -1
if strs in chart:
print(chart[strs])
else:
for i in range(len(strs)):
if i == omit:
pass
elif i <= len(strs)-2:
if chart[strs[i]] < chart[strs[i+1]]:
result += chart[strs[i+1]] - chart[strs[i]]
omit = i+1
else:
result += chart[strs[i]]
else:
result += chart[strs[i]]
print(result)
方法二:
s=input("")
sum=0
c={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
for i in range(len(s)-1):
if c[s[i]]<c[s[i+1]]:
sum -= c[s[i]]
else:
sum += c[s[i]]
sum += c[s[-1]]
print(sum)
思路:
使用字典将罗马数字与阿拉伯数字对应起来。s[i]显示输入的相应位置的罗马数字,c[s[i]]为对应的值,即阿拉伯数字。
依次遍历输入的字符串,从左到右,如果左边的数字大于右边的数字,则两者相加;如果左边的数字小于右边的数字,则右边的数字减去左边的数字。最右边的数字,即最后一位是必须要加上的。所以在遍历时可以有方法二和方法三两种。(也可以反着来,从右向左遍历)
选择遍历整个字符串时,在选择判断语句上添加额外的条件。或是直接遍历到倒数第二个字符,再加上倒数第一个c[s[-1]]
方法三:
s=input("")
sum=0
c={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
for i in range(len(s)):
if i< (len(s)-1) and c[s[i]] < c[s[i+1]]:
sum -= c[s[i]]
else:
sum += c[s[i]]
print(sum)
方法四:
班内一位大佬的做法
rome_number_string = input("")
dt = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
ls = []
for s in rome_number_string:
ls.append(dt[s]) #将输入的每个罗马数字对应的阿拉伯数字存放在列表中
ls = list(reversed(ls)) #不用转置列表也可以的,不过后面需要改。转置后就是按之前的从右到左
arab_number = 0
re=0
for n in ls:
if n < re:
arab_number -= n
else:
arab_number += n
re += n
print(arab_number)
方法五:
str = input("")
sum = 0
for i in range(len(str)):
if str[i]=="I":
if i!=len(str)-1 and (str[i+1]=='V' or str[i+1]=="X"):
sum-=1
else:
sum+=1
elif str[i]=="V":
sum+=5
elif str[i]=="X":
if (i!=len(str)-1 and (str[i+1]=="C" or str[i+1]=="L")):
sum-=10
else:
sum+=10
elif str[i]=="L":
sum+=50
elif str[i]=="C":
if (i!=len(str)-1 and (str[i + 1] == "D" or str[i+1]=="M")):
sum-=100
else:
sum+=100
elif str[i]=="D":
sum+=500
elif str[i]=="M":
sum+=1000
print(sum)
没有使用字典,只用了条件判断
前四个是老师在班内展示的代码,最后一个是室友搜到的,不知道来源在哪里。