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有点特殊,不能和别的罗马符号组合。

@Bulala-liu
Copy link

好棒!

@BEARINSKY
Copy link

看了那么多转换算法,就这个最棒。分析、设计都很棒

@AltureT
Copy link

AltureT commented Jan 18, 2017

看到这道题目,想了很多方法都不满意,这是我见过最满意的一种实现方式!

@cduyzh
Copy link

cduyzh commented Jun 11, 2017

great

@cduyzh
Copy link

cduyzh commented Jun 11, 2017

great

@vamyane
Copy link

vamyane commented Jun 14, 2017

我草我怎么没想到 这个算法真的厉害了●▽●

@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