使用JavaScript | Python | Java | C++解决从罗马数字转换到阿拉伯数字


在这里插入图片描述

问题描述:

罗马数字是由七个不同的符号表示:IVXLCDM

Symbol(标记)Value (值)
I1
V5
X10
L50
C100
D500
M1000

例如,2用罗马数字II书写,只是将两个I加在一起。12作为写XII,这是用X + II。数字27写为XXVII,即XX + V + II

罗马数字通常从左到右从大到小书写。但是,四的数字不是IIII。而是将数字四写为IV。因为一个在之前,所以我们减去它等于。相同的原理适用于数字9,记为IX。在六种情况下使用减法:

  • I可以放在V(5)X(10)之前制作49
  • X可以放在L(50)C(100)之前制作4090
  • C可以放在D(500)M(1000)之前制作400900

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

例子:

范例1:
输入:s =“ III”
输出:3
范例2:
输入:s =“ IV”
输出:4
范例3:
输入:s =“ IX”
输出:9
范例4:
输入:s =“LVIII”
输出:58
解释:L = 50,V = 5,III = 3。
范例5:
输入:s =“ III”
输出:3
解释:M = 1000, CM = 900, XC = 90 and IV = 4

限制条件:

  • 1 <= s.length <= 15
  • s仅包含字符(‘I’, ‘V’, ‘X’, ‘L’, ‘C’, ‘D’, ‘M’)。
  • 确保s范围内的有效罗马数字[1, 3999]。

解决思路:

(跳转至:问题描述||代码:JavaScript | Python | Java | C ++)

关于罗马数字计数的唯一真正棘手的事情是,数字被用作减值而不是加值。在“IV”,例如,值“I”,1,从的值中减去“V”,5。否则,您只需将所有数字的值相加即可。

关于减号,我们应该意识到的一件事是它们是可识别的,因为它们出现在较大的数字之前。这意味着迭代罗马数字的更简单方法是从右到左,以帮助进行识别过程。

因此,在这里要做的一件简单的事情是向后遍历S,查找每个字母的值,然后将其添加到我们的答案(ans)中。如果我们遇到的字母值小于到目前为止所看到的最大字母值,则应减去而不是加。

标准方法是使用一个单独的变量来跟踪看到的最高值,但是这里有一个更简单的技巧。由于数字通常以罗马数字符号从右到左增加,因此任何减数也必须小于我们当前的ans

因此,我们可以在这里避免使用额外的变量。我们确实遇到了重复数字导致问题的情况(即“III”),但是我们可以通过将num乘以24之间的任意数字,然后再将其与ans进行比较来清除它,因为数字在数值上的跃迁为至少5倍

一旦我们知道如何正确识别减数,就可以简单地向后迭代S来查找并返回ans

执行代码:

Javascript和Python都可以非常快速地使用对象/区分对象进行操作,因此我们将使用查找表来获取罗马数字值。

Java和C ++都不处理对象,因此我们将使用切换用例以相同的方式工作。

JavaScript代码:

(跳转至:问题描述||解决思路

const roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

var romanToInt = function(S) {
    let ans = 0
    for (let i = S.length-1; ~i; i--) {
        let num = roman[S.charAt(i)]
        if (4 * num < ans) ans -= num
        else ans += num
    }
    return ans
};

Python代码:

(跳转至:问题描述||解决思路

roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

class Solution:
    def romanToInt(self, S: str) -> int:
        ans = 0
        for i in range(len(S)-1,-1,-1):
            num = roman[S[i]]
            if 4 * num < ans: ans -= num
            else: ans += num
        return ans

Java代码:

(跳转至:问题描述||解决思路

class Solution {
    public int romanToInt(String S) {
        int ans = 0, num = 0;
        for (int i = S.length()-1; i >= 0; i--) {
            switch(S.charAt(i)) {
                case 'I': num = 1; break;
                case 'V': num = 5; break;
                case 'X': num = 10; break;
                case 'L': num = 50; break;
                case 'C': num = 100; break;
                case 'D': num = 500; break;
                case 'M': num = 1000; break;
            }
            if (4 * num < ans) ans -= num;
            else ans += num;
        }
        return ans;
    }
}

C++代码:

(跳转至:问题描述||解决思路

class Solution {
public:
    int romanToInt(string S) {
        int ans = 0, num = 0;
        for (int i = S.size()-1; ~i; i--) {
            switch(S[i]) {
                case 'I': num = 1; break;
                case 'V': num = 5; break;
                case 'X': num = 10; break;
                case 'L': num = 50; break;
                case 'C': num = 100; break;
                case 'D': num = 500; break;
                case 'M': num = 1000; break;
            }
            if (4 * num < ans) ans -= num;
            else ans += num;
        }
        return ans;        
    }
};

欢迎关注作者公众号【海拥】

保存或者长按识别
在这里插入图片描述

后面我还会持续更新类似免费好玩的H5小游戏、Java小游戏、好玩、实用的项目和软件等等

更多相关

最后,不要忘了❤或📑支持一下哦

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CSS中并没有提供直接将数字转换罗马数字的方法,但可以通过一些技巧实现。 一种方法是使用CSS的 `counter()` 函数,结合伪元素 `::before` 或 `::after`,设置计数器的起始值和计数器的样式,使其显示为罗马数字。例如: ```css /* 设置计数器的起始值为1,并将其显示为罗马数字 */ body { counter-reset: my-counter 1; } /* 在h1元素前添加一个伪元素 */ h1::before { content: counter(my-counter, upper-roman); /* 显示计数器,并将其转换为大写罗马数字 */ counter-increment: my-counter; /* 计数器自增1 */ } ``` 要实现罗马数字阿拉伯数字的相互转换,可以使用JavaScript实现。例如,将阿拉伯数字转换罗马数字的函数如下: ```javascript function arabicToRoman(num) { let roman = ''; const romanNumeralMap = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }; for (let key in romanNumeralMap) { while (num >= romanNumeralMap[key]) { roman += key; num -= romanNumeralMap[key]; } } return roman; } ``` 而将罗马数字转换阿拉伯数字的函数如下: ```javascript function romanToArabic(roman) { const romanNumeralMap = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }; let arabic = 0; let prev = 0; for (let i = roman.length - 1; i >= 0; i--) { const curr = romanNumeralMap[roman[i]]; if (curr < prev) { arabic -= curr; } else { arabic += curr; } prev = curr; } return arabic; } ``` 使用时,只需在需要转换的数字上调用相应的函数即可。例如: ```javascript const roman = arabicToRoman(123); // 将阿拉伯数字123转换罗马数字 const arabic = romanToArabic('CXXIII'); // 将罗马数字CXXIII转换阿拉伯数字 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海拥✘

“听说赞赏的人运气会爆棚哦!”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值