美文网首页
number转罗马字符(Roman Numeral Conver

number转罗马字符(Roman Numeral Conver

作者: 不要变成发抖的小喵喵喵喵喵喵 | 来源:发表于2017-06-12 18:26 被阅读0次

    题目来自freecodecamp上面的一道练习题 Roman Numeral Converter

    将给定的数字转换成罗马数字。
    所有返回的 罗马数字 都应该是大写形式。
    如果你被难住了,记得使用 Read-Search-Ask尝试与他人结伴编程、编写你自己的代码
    这是一些对你有帮助的资源:
    Roman Numerals
    Array.splice()
    Array.indexOf()
    Array.join()

    参考Roman Numeral Converter(算法)

    单个罗马数字格式有一些规则:
    当一个罗马数字符号出现在比它更大的数字的右边时,要把它们加起来得到最终结果数字。
    例如: VI = V + I = 5 + 1 = 6
    当一个罗马数字符号出现在比它更大的数字的左边时,要把它们相减得到最终结果数字。
    例如:IX = X - I = 10 - 1 = 9
    同一个罗马数字内部不能包含3个以上相同字符。
    例如: IIII 是非法的,表示4应用IV

    摘录了一些代码中可能用到的罗马数字与阿拉伯数字对应关系,如下表所示:

    I IV V IX X XL L XC C CD D CM M
    1 4 5 9 10 40 50 90 100 400 500 900 1000

    观察上表可以想到,创建两个数组,分别放入表中每行内容,依靠其对应关系进行转化。

    var nums = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
    var romans =["m","cm","d","cd","c","xc","l","xl","x","ix","v","iv","i"];
    

    再看一下资料给定的罗马数字拼接规则:

    Break the number into Thousands, Hundreds, Tens and Ones, and write down each in turn.

    翻译过来是,把给定数字拆分为千位、百位、十位、个位,然后再由大至小依次进行拼接。

    5000以上的罗马数字比较特殊,很少用到,本题中不予讨论。

    因为多位罗马数字是高位到低位,因此我们创建的两个数组最好也是由大到小,先讨论高位,再讨论低位。

    声明一个空字符串,以便写入罗马字符串的拼接。

    var str = '';
    

    对 nums 的每一项进行遍历,每当传入的 num 值大于或等于当前项时,将其对应的罗马数字推入之前声明的字符串,并把 num 值减去当前符合条件的数值。

    nums.forEach(function(item,index,array){
        while(num >= item){
          str += romans[index];
          num -= item;
        }
      });
    

    最后不要忘记把返回结果转为大写哦!

    function convert(num) {
      var nums = [1000,900,500,400,100,90,50,40,10,9,5,4,1];
      var romans =["m","cm","d","cd","c","xc","l","xl","x","ix","v","iv","i"];
      var str = '';
      nums.forEach(function(item,index,array){
        while(num >= item){
          str += romans[index];
          num -= item;
        }
      });
      
     return str.toUpperCase();
    }
    

    相关文章

      网友评论

          本文标题:number转罗马字符(Roman Numeral Conver

          本文链接:https://www.haomeiwen.com/subject/oftrqxtx.html