RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-648076

pythonniy_chainik's questions

Martin Hope
pythonniy_chainik
Asked: 2025-01-28 23:35:18 +0000 UTC

需要对用罗马数字系统表示十进制数的问题的解决方案进行代码审查

  • 6

问题:
七个不同的符号代表罗马数字,其含义如下:

罗马数字 十进制数
我 1
五 5
十 10
大号 50
碳 100
德 500
米 1000

罗马数字是由十进制数值从最高位到最低位相加转换而成的。小数位数值转换为罗马数字有以下规则:

如果值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号添加到结果中,减去其值,然后将余数转换为罗马数字。

如果值以 4 或 9 开头,则使用减法形式,表示从下一个符号中减去一个符号,例如 4 减 1(I)小于 5(V):IV,9 减 1(I)小于 10(X):IX。仅使用以下减法形式:4 (IV)、9 (IX)、40 (XL)、90 (XC)、400 (CD) 和 900 (CM)。

只有 10 的幂(I、X、C、M)可以连续添加不超过 3 次,以表示 10 的倍数。不能多次添加 5 (V)、50 (L) 或 500 (D)。如果需要将某个符号加 4 次,请使用减法形式。

给定一个整数,将其转换为罗马数字。

示例 1:

Ввод: число = 3749

Вывод: "MMMDCCXLIX"

Объяснение:

3000 = МММ как 1000 (М) + 1000 (М) + 1000 (М)
 700 = DCC как 500 (D) + 100 (C) + 100 (C)
  40 = XL как 10 (X) меньше 50 (L)
   9 = IX как 1 (I) меньше 10 (X)
Примечание: 49 не на 1 (I) меньше 50 (L), поскольку преобразование основано на десятичных знаках.

示例 2:

Ввод: число = 58

Вывод: "LVIII"

Объяснение:

50 = L, 8 = VIII

示例 3:

Ввод: число = 1994

Вывод: "MCMXCIV"

Объяснение:

1000 = М
 900 = СМ
  90 = ХС
   4 = IV

限制:

1 <= num <= 3999

链接:
https://leetcode.com/problems/integer-to-roman/description/

我最近为这个任务写了一些代码。关键特性是我决定不向表中不存在的元组添加值(None 除外)。结果如下:

def int_to_roman(num):
    result = []
    nums = (1000, 500, 100, 50, 10, 5, 1, None)
    roman_nums = ('M', 'D', 'C', 'L', 'X', 'V', 'I')

    while not num == 0:
        for max_deductible in nums:
            # Находим такое наибольшее вычитаемое, которое будет меньше либо равно num
            if max_deductible <= num:
                # Сохраняем индекс вычитаемого
                max_deductible_index = nums.index(max_deductible)
                break

        # Сохраняем предыдущее число (до max_deductible)
        previous_num = nums[max_deductible_index - 1]
        flag = len(str(max_deductible)) == len(str(previous_num))

        # Выбор вычитаемого из next_num, которое подходит для данного случая
        possibly_deductible = (nums[max_deductible_index + 1], max_deductible)[flag]

        # Если существует число менее num и более max_deductible (в nums)
        if all((possibly_deductible, previous_num)) and previous_num - possibly_deductible <= num:
            num -= (previous_num - possibly_deductible)
            possibly_deductible_index = nums.index(possibly_deductible)

            # В римском вычитании сначала ставится вычитаемое, а потом уменьшаемое
            result.append(roman_nums[possibly_deductible_index] +
                          roman_nums[max_deductible_index - 1])
        else: # Если такого числа не существует, вычитаем max_deductible
            num -= max_deductible
            result.append(roman_nums[max_deductible_index])

    return ''.join(result) # Возращаем результат

我很乐意听到任何批评。但重要的是要明白,我最近才进入这个领域,因此我不应该建议任何来自库/框架的功能或方法。

python
  • 1 个回答
  • 147 Views
Martin Hope
pythonniy_chainik
Asked: 2024-11-16 22:42:19 +0000 UTC

Python,如何在没有循环的情况下将矩阵连接到列表中?

  • 10

例如,有一个矩阵

 [['1', '4', '9', '9', '4', '7'], ['6', '9', '8', '6', '7', '4'],
 ['1', '1', '6', '1', '1', '1'], ['1', '4', '5', '8', '7', '5'],
 ['6', '7', '8', '1', '1', '0'], ['6', '9', '9', '9', '7', '7']]

如何将这个矩阵连接到一个lst=[]没有循环的列表中?列一个清单lst=['1', '4', '9', '9', '4', '7','6', '9', '8', '6', '7', '4','1', '1', '6', '1', '1', '1','1', '4', '5', '8', '7', '5','6', '7', '8', '1', '1', '0', '6', '9', '9', '9', '7', '7']?

python
  • 4 个回答
  • 50 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5