zoukankan      html  css  js  c++  java
  • [JS]将给定的数字转换成罗马数字

    题目描述:将给定的数字转换成罗马数字。没有特大数字。


    注意点:

    • js中的除法返回完整的商,利用Math.floor()向下取整
    • 对于4,5,9都是要处理的,不同于其他数字的
    • 每次循环之后原数都要减去每次处理的数

    方法:

    1. 按照1000,100,10,1来进行分步,所以循环四次。
    2. 在循环内部进行位数的处理,先看位数是否是9,是9,字符串直接加入相应字符。
    3. 否是否>=5,是的先将5的字符放入。
    4. 再处理剩下的,如果剩余==4,加入4的特殊字符,否则直接repeat对应位的字符。

     1 function convert(num) {
     2 var n,m,str="",i=1000;
     3   for(;i>0;i/=10){
     4     n=Math.floor(num/i);//向下取整
     5     m=n;
     6     switch(i){
     7       case 1000:
     8     {
     9       
    10       if(m>0) str+="M".repeat(n); 
    11       num-=n*i;//减去
    12       break;
    13     }
    14       case 100:
    15     {
    16       if(n==9) {str+="CM";m-=9;}
    17       if(m>=5) {str+="D"; m-=5;}
    18       if(m==4) {str+="CD"; m-=4;}
    19       if(m>0) str+="C".repeat(m);
    20       num-=n*i;
    21       break;
    22     }
    23       case 10:
    24     { if(n==9) {str+="XC";m-=9;}
    25       if(m>=5) {str+="L"; m-=5;}
    26       if(m==4) {str+="XL"; m-=4;}
    27       if(m>0) str+="X".repeat(m);
    28       num-=n*i;
    29       break;
    30     }
    31       case 1:
    32     {
    33        if(n==9) {str+="IX";m-=9;}
    34       if(m>=5) {str+="V"; m-=5;}
    35       if(m==4) {str+="IV"; m-=4;}
    36       if(m>0) str+="I".repeat(m);
    37       num-=n*i;
    38       break;
    39     }
    40   }
    41   }
    42  
    43   return str;
    44 }
    45 
    46 convert(16);
    原创供学习参考使用,转载请注明出处http://www.cnblogs.com/cuphoria/ @jm_epiphany
  • 相关阅读:
    :nth-child(n)选择器
    lable标签的用途
    输入框事件处理
    2D转换与3D转换的区别
    vertical-align  css属性
    linux下nginx整合php
    利用crontab定时备份nginx访问日志(也可以说是定时切分日志)
    关于nginx配置虚拟主机
    linux下nginx编译安装
    正则表达式解决结巴字符串
  • 原文地址:https://www.cnblogs.com/cuphoria/p/9732242.html
Copyright © 2011-2022 走看看