Skip to content

Instantly share code, notes, and snippets.

@imilu
Created July 19, 2016 03:07
Show Gist options
  • Save imilu/00f32c61e50b7ca296f91e9d96d8e976 to your computer and use it in GitHub Desktop.
Save imilu/00f32c61e50b7ca296f91e9d96d8e976 to your computer and use it in GitHub Desktop.
JS阿拉伯数字转罗马数字

学习了一种很有意思的进制(姑且这么说吧...)转换方式。 原理就是利用键值对+循环遍历。

第一次遇见这个方法是在一本讲Python的书里面,(不记得什么名字了,以后翻出来在补上。) 当时颇不以为然,第二次见到才醒悟,觉得这是一个不错的方法。

代码

function convert(num) {
  var lookup ={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};
  var romanStr = "";
  for (var i in lookup){
    while (num >= lookup[i]){
      romanStr+=i;
      num -= lookup[i];
    }
  }
  return romanStr;
}

代码的关键在于lookup对象里面的键值对,都是1,4,5,9这几个数字进位。 看图更容易明白。

Roman Symbols

1~3的罗马符号都是由I累加上的。5~9的罗马符号都是由VI累加得到。 49有点特殊,不能和别的罗马符号组合。

@drrgtg
Copy link

drrgtg commented Jan 1, 2018

棒棒的.

@taoliq
Copy link

taoliq commented Oct 6, 2019

太优美了

@wuwb
Copy link

wuwb commented Jan 14, 2020

赞👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment