题目描述:将给定的数字转换成罗马数字。没有特大数字。
注意点:
- js中的除法返回完整的商,利用Math.floor()向下取整
- 对于4,5,9都是要处理的,不同于其他数字的
- 每次循环之后原数都要减去每次处理的数
方法:
- 按照1000,100,10,1来进行分步,所以循环四次。
- 在循环内部进行位数的处理,先看位数是否是9,是9,字符串直接加入相应字符。
- 否是否>=5,是的先将5的字符放入。
- 再处理剩下的,如果剩余==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);