zoukankan      html  css  js  c++  java
  • 罗马数字转整数

    我自己的代码:

    roman_num = {'I': 1, 'IV': 4, 'IX': 9, 'V': 5, 'X': 10, 'XL': 40, 'XC': 90, 'L': 50, 'C': 100, 'CD': 400, 'CM': 900, 'D': 500, 'M': 1000}
    num = 'LVIII'
    list_num = []
    i = 0
    while i < len(num):
    if i < len(num)-1:
    str = num[i] + num[i+1]
    if str in roman_num:
    list_num.append(roman_num[str])
    i += 2
    print(str)
    else:
    list_num.append(roman_num[num[i]])
    i += 1
    print(num[i])
    else:
    list_num.append(roman_num[num[i]])
    print(num[i])
    i += 1
    sum1 = 0
    for i in list_num:
    sum1 += i
    print(sum1)



    使用字典




    网上的另一种解法:

    从罗马数字我们可以得出这么一条规律:
    从左往右一位一位的看,如果这一位数字比它右边一位的数字大或与其相等,则加上这一位代表的值,如果它比右边一位小,则减去这一位代表的数字。
    例如: 'MMCMLXIV': 第一位是M,它的后一位也是M,所以 num = 0 + 1000,之后 M > C, num = num + 1000 =2000,之后到特殊值,因为C<M,所以num=num-C =2000-100=1900,之后再加上1000得到 num=2900……以此类推进行下去,最后可得到 num = 2964
    需要注意的是,位与后一位的比较只需进行到倒数第二位即可,因为最后一位没有比它小的一位能够进行比较,直接加上最后一位代表的值即可。

    代码块
    class Solution:
    def romanToInt(self, s: str) -> int:
    roma_nums = {'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}
    num = 0
    for i in range(len(s)-1):
    if roma_nums[s[i]]>=roma_nums[s[i+1]]:
    num += roma_nums[s[i]]
    else:
    num -= roma_nums[s[i]]
    last_num = s[len(s)-1]
    num = num + roma_nums[last_num]
    return num

    作者:kanomei
    链接:https://leetcode-cn.com/problems/roman-to-integer/solution/python3-bao-li-jie-fa-by-kanomei/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    [BZOJ3223] [Tyvj1729] 文艺平衡树 (splay)
    [BZOJ3098] Hash Killer II
    [BZOJ3000] Big Number (Stirling公式)
    [BZOJ2048] [2009国家集训队] 书堆
    [BZOJ1707] [Usaco2007 Nov] tanning分配防晒霜 (贪心)
    BZOJ2482: [Spoj1557] Can you answer these queries II
    BZOJ2157: 旅游
    BZOJ2795: [Poi2012]A Horrible Poem
    BZOJ3681: Arietta
    BZOJ3218: a + b Problem
  • 原文地址:https://www.cnblogs.com/hehehe-wy7/p/12720832.html
Copyright © 2011-2022 走看看