使用javascript将罗马数字转换为阿拉伯数字

Anju

嗨,我正在尝试使用 javascript 将罗马数字转换为阿拉伯数字。我写了一个代码,但它失败了。我试图遵循的规则是:

如果较大的数字在较小的数字之前,则加法,如果较小的数字在较大的数字之前,则减法。

除此之外,我还有一些其他规则,例如 'D'、'L' 和 'V' 根本不能重复,而 'M' 只能重复两次(不确定如何实现,我可以使用正则表达式吗?为它以及如何?)

代码 :

    function romanToArabic(roman){
        if(roman == null)
            return -1;
            var value;
        for(var i=0;i<roman.length;i++){
            current = char_to_int(roman.charAt(i));
            next = char_to_int(roman.charAt(i+1));
            console.log("Current",current);
            console.log("Next",next);
            if(current >= next){
                value = current + next;
                console.log(value);
            }
            else {
                console.log(value);
                value = next - current;
            } 
        }
        return value;
    }
    
    function char_to_int(character) {
        switch(character){
            case 'I': return 1;
            case 'V': return 5;
            case 'X': return 10;
            case 'L': return 50;
            case 'C': return 100;
            case 'D': return 500;
            case 'M': return 1000;
            default: return -1;
        }
    }
    
    console.log(romanToArabic('IIX'));

有人可以帮忙吗?会很感激的!

添加了截图:

在此处输入图片说明

在此处输入图片说明

特里科特

The issue is that your code only subtracts the value corresponding to one character, while in IIX you need to subtract twice (although that kind of representation for the number 8 is quite unconventional -- 8 would normally be represented as VIII).

The solution is to keep collecting a separate sum for when the symbol is the same, so that after reading the first two "I", you have two separate sums:

  • total: 2
  • value of all "I": 2

Then when you encounter the "X" and detect that a subtraction is needed, you first undo the addition already done for the grand total, and then perform the subtraction with the value you collected for the "I":

  • total: -2

After this, you start with a reset value for "X":

  • total: 10 + -2 = 8
  • value for all "X": 10

这是您为发生这种情况而改编的代码:

function romanToArabic(roman){
    if(roman == null)
        return -1;
    var totalValue = 0, 
        value = 0, // Initialise!
        prev = 0;
        
    for(var i=0;i<roman.length;i++){
        var current = char_to_int(roman.charAt(i));
        if (current > prev) {
            // Undo the addition that was done, turn it into subtraction
            totalValue -= 2 * value;
        }
        if (current !== prev) { // Different symbol?
            value = 0; // reset the sum for the new symbol
        }
        value += current; // keep adding same symbols
        totalValue += current;
        prev = current;
    }
    return totalValue;
}

function char_to_int(character) {
    switch(character){
        case 'I': return 1;
        case 'V': return 5;
        case 'X': return 10;
        case 'L': return 50;
        case 'C': return 100;
        case 'D': return 500;
        case 'M': return 1000;
        default: return -1;
    }
}

console.log(romanToArabic('IIX'));

至于您将连续“I”的数量限制为最多两个,“D”最多为一个的附加问题,...您可以在函数的开头使用正则表达式测试:

if (/III|XXX|CCC|MMM|VV|LL|DD|[^IVXLCDM]/.test(roman)) 
    return -1;

您可以附加由|. 例如,如果您不希望“I”直接出现在“L”、“C”、“D”或“M”之前,则扩展为:

if (/III|XXX|CCC|MMM|VV|LL|DD|[^IVXLCDM]|I[LCDM]/.test(roman)) 
    return -1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将罗马数字转换为阿拉伯数字-递归

来自分类Dev

将罗马数字转换为阿拉伯数字-递归

来自分类Dev

使用数组将罗马数字转换为阿拉伯数字时遇到问题

来自分类Dev

罗马数字到阿拉伯数字的转换

来自分类Dev

将罗马数字翻译成阿拉伯数字

来自分类Dev

将罗马数字翻译成阿拉伯数字

来自分类Dev

使用javascript将阿拉伯数字转换为单词

来自分类Dev

转换罗马/阿拉伯数字大于4000

来自分类Dev

如何将阿拉伯数字转换为英文数字

来自分类Dev

Symfony 5:将阿拉伯数字转换为现代数字

来自分类Dev

将字符串中的英语数字转换为阿拉伯数字

来自分类Dev

将任何阿拉伯数字转换为英文数字

来自分类Dev

将Pandas列中的阿拉伯数字转换为整数

来自分类Dev

使用Javascript将运算符(+,-,*,/)应用于东部阿拉伯数字

来自分类Dev

如何将英语数字转换为阿拉伯数字,例如196转换为١٩٦?

来自分类Dev

在html文档中将英语数字转换为阿拉伯数字

来自分类Dev

如何在Django中将普通数字转换为阿拉伯数字

来自分类Dev

JavaScript:输入文字时,可快速将印地文数字转换为阿拉伯数字

来自分类Dev

用于在西阿拉伯数字和东阿拉伯数字之间转换的 Excel 公式?

来自分类Dev

将Unicode中的日期时间字符串(带有阿拉伯数字)转换为DateTime对象

来自分类Dev

转换为十进制阿拉伯数字

来自分类Dev

使用带有阿拉伯数字的阿拉伯字母

来自分类Dev

JS中的罗马和阿拉伯数字字符串数组排序

来自分类Dev

如何在javascript中的阿拉伯数字之间使用分隔符?

来自分类Dev

将正文中的所有数字转换为阿拉伯数字,而不是选择列表中的值RoR

来自分类Dev

将用阿拉伯数字书写的日期转换为英文,然后将时间从 12 小时转换为 24 小时

来自分类Dev

阿拉伯数字/日期显示在各地

来自分类Dev

在 Laravel 5 中验证阿拉伯数字

来自分类Dev

我想将阿拉伯数字转换为英文,并且在下面尝试了代码

Related 相关文章

  1. 1

    将罗马数字转换为阿拉伯数字-递归

  2. 2

    将罗马数字转换为阿拉伯数字-递归

  3. 3

    使用数组将罗马数字转换为阿拉伯数字时遇到问题

  4. 4

    罗马数字到阿拉伯数字的转换

  5. 5

    将罗马数字翻译成阿拉伯数字

  6. 6

    将罗马数字翻译成阿拉伯数字

  7. 7

    使用javascript将阿拉伯数字转换为单词

  8. 8

    转换罗马/阿拉伯数字大于4000

  9. 9

    如何将阿拉伯数字转换为英文数字

  10. 10

    Symfony 5:将阿拉伯数字转换为现代数字

  11. 11

    将字符串中的英语数字转换为阿拉伯数字

  12. 12

    将任何阿拉伯数字转换为英文数字

  13. 13

    将Pandas列中的阿拉伯数字转换为整数

  14. 14

    使用Javascript将运算符(+,-,*,/)应用于东部阿拉伯数字

  15. 15

    如何将英语数字转换为阿拉伯数字,例如196转换为١٩٦?

  16. 16

    在html文档中将英语数字转换为阿拉伯数字

  17. 17

    如何在Django中将普通数字转换为阿拉伯数字

  18. 18

    JavaScript:输入文字时,可快速将印地文数字转换为阿拉伯数字

  19. 19

    用于在西阿拉伯数字和东阿拉伯数字之间转换的 Excel 公式?

  20. 20

    将Unicode中的日期时间字符串(带有阿拉伯数字)转换为DateTime对象

  21. 21

    转换为十进制阿拉伯数字

  22. 22

    使用带有阿拉伯数字的阿拉伯字母

  23. 23

    JS中的罗马和阿拉伯数字字符串数组排序

  24. 24

    如何在javascript中的阿拉伯数字之间使用分隔符?

  25. 25

    将正文中的所有数字转换为阿拉伯数字,而不是选择列表中的值RoR

  26. 26

    将用阿拉伯数字书写的日期转换为英文,然后将时间从 12 小时转换为 24 小时

  27. 27

    阿拉伯数字/日期显示在各地

  28. 28

    在 Laravel 5 中验证阿拉伯数字

  29. 29

    我想将阿拉伯数字转换为英文,并且在下面尝试了代码

热门标签

归档