gpt4 book ai didi

c# - 罗马数字减法不转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:42 25 4
gpt4 key购买 nike

是否可以在不转换为十进制数的情况下减去罗马数?

例如:

X - III = VII

所以在输入中我有 XIII。在输出中我有 VII

我需要不转换为十进制数的算法。

现在我不知道。

最佳答案

最简单的算法是为罗马人创建 -- 函数。减去 A-B 意味着同时重复 A-- 和 B--,直到 B 中什么都没有。


但我想做一些更有效的事情

罗马数字可以从某种非常弱的方式看做位置。我们将使用它。

让我们制作简短的减法表:

X-V=V

X-I=IX
IX-I=VIII
VIII-I=VII
VII-I=VI
VI-I=V
V-I=IV
IV-I=III
III-I=II
II-I=I
I-I=_

加法:

V+I=VI

CLX 和 MDC 级别也是如此。当然,您可以只创建一个表,但可以通过替换字母在不同级别上使用它。

  • 让我们以数字为例,A=MMDCVI=2606 a B=CCCXLIII=343
  • 让我们将它们分布到 levels=powers of 10 中。以下几个操作将仅在级别内进行。

    A=MM+DC+VI, B=CCC+XL+III

  • 然后减去

    A-B= MM+(DC-CCC)+(-XL)+(VI-III)

  • 在每个级别,我们都有三个可能的字母:单位、五单位和十单位。组合(单位,五单位)和(单位,十单位)将转化为差异

    A-B=MM+(DC-CCC)+(-L+X)+(VI-III)

  • 正常组合(高级符号在初级符号之前)将转换为总和。

    A-B= MM+(D+C-C-C-C)+(-L+X)+(V+I-I-I-I)

  • 缩短相同符号的组合

    A-B= MM+(D-C-C)+(-L+X)+(V-I-I)

  • 如果某个级别为负,则向高级级别借用一个单元。当然,它可以通过空水平。

    A-B= MM+(D-C-C-C)+(C-L+X)+(V-I-I)

  • 现在,在每个级别中,我们将应用我们制作的减法表,减去每个减去的符号,从表的顶部开始并重复它,直到没有减去的成员剩余。

    A-B=MM+(CD-C-C)+(L+X)+(IV-I)

    A-B=MM+(CCC-C)+(L+X)+(III)

    A-B=MM+(CC)+(L+X)+(III)

  • 现在,使用加法表

    A-B=MM+(CC)+(LX)+(III)

  • 现在,我们打开括号。如果某个层级中有 '_',则其位置上将没有任何内容。

    A-B=MMCCLXIII =2263

结果正确。

关于c# - 罗马数字减法不转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22040178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com