罗马数字转换的几种方法 python123平台

罗马数字转换的几种方法 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)

没有使用字典,只用了条件判断

前四个是老师在班内展示的代码,最后一个是室友搜到的,不知道来源在哪里。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值