阿拉伯数字转罗马数字-js实现

规则如下

image.png

限制

本次实现了3999及以下的数字转换。

具体代码

function convert(num) {

  //最大数字是3999,且为整数
  var romanNum = ['I','V','X','L','C','D','M'];
  var strNum = String(num);
  var arrNum = strNum.split("");
  var len = arrNum.length;
  var roman = '';

  for (var i = 0; i < len; i++) {
    var everyNum = Number(arrNum[i]);
    if (everyNum < 4) {
      for(var j = 0; j < Number(arrNum[i]); j++) {
        roman += romanNum[(len-i-1)*2];
      } 
    } else if (everyNum === 4) {
      roman += romanNum[(len-i-1)*2] + romanNum[(len-i-1)*2+1];
    } else if (everyNum === 5) {
      roman += romanNum[(len-i-1)*2+1];
    } else if (everyNum > 5 && everyNum <= 8) {
        roman += romanNum[(len-i-1)*2+1];
      for(var k = 0; k < Number(arrNum[i]) - 5; k++) {
        roman += romanNum[(len-i-1)*2];
      } 
    } else if (everyNum === 9) {
      roman += romanNum[(len-i-1)*2] + romanNum[(len-i)*2];
    }
  }
  
  return roman;
}

convert(9);

待改进

功能是实现了,但代码过于繁琐。。。一点都不优雅

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 昨日,在 FCC 平台整整用了两三小时,才刷出一道 JS 算法题,回首而看,最终的代码也就那么多行,记录过程,写文...
    hylerrix阅读 5,604评论 11 17
  • 八月中旬,我终干坐上了飞机,飞往了日本,第一次出国,有些激动。 当飞机降落在名古屋机场时已经是下午了,所以就直接去...
    4b65d812ba26阅读 203评论 0 0
  • 不要做个烂好人 不忍心拒绝别人 却被人家拒绝。。。 除了自己,别想依靠谁
    缘来缘去599阅读 150评论 0 0
  • 2018年是非常艰难的一年,感谢大家的追随和付出,谢谢!今天头疼不已,没有更新了。
    我手抒我心阅读 141评论 0 0
  • 婷是我姑家的孩子, 我的表妹。 在北方, 计划生育真的是严格执行的, 作为独生子女,从小就被教导,表兄表妹是我的亲...
    克莱尔在阿姆阅读 637评论 0 0