
数字转罗马数字
方法一:
function convert(num) { //此算法仅限定在1~3999之间
var roman = '';
var Ro = ['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I']; //枚举几个特殊的数值,包括7个基础字母和6个4,9开头的特殊符号
var Nu = [1000,900,500,400,100,90,50,40,10,9,5,4,1]; //枚举几个特殊的数值,与上对应
for(var i = 0;i < Nu.length;i++){ //先遍历Nu数组的每一个数
while(num >= Nu[i]){ //然后再进行一个个对比,只要num大于Nu数组里的数,就保持while循环
roman += Ro[i]; //罗马数字加上对应的字母
num -= Nu[i]; //阿拉伯数字减去对应的数字
}
}
return roman;
}
convert(4);
方法二:
function convert(num) {
var arr_0_9 = ['','I','II','III','IV','V','VI','VII','VIII','IX'],
arr_10_90 = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'],
arr_100_900 = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'],
arr_1000_9000 = ['','M','MM','MMM','MMMM','MMMMM','MMMMMM','MMMMMMM','MMMMMMMM','MMMMMMMMM'];
var str = num.toString(),
str2Arr = [],
r = '';
if(str.length<4){
switch (str.length){
case 3:
str = '0'+str;
break;
case 2:
str = '00'+str;
break;
case 1:
str = '000'+str;
break;
default:
str = '0000';
}
}
str2Arr = str.split('');
for(var i=0;i<4;i++){
switch (i){
case 3:
r+= arr_0_9[parseInt(str2Arr[i])];
break;
case 2:
r+= arr_10_90[parseInt(str2Arr[i])];
break;
case 1:
r+= arr_100_900[parseInt(str2Arr[i])];
break;
default:
r+= arr_1000_9000[parseInt(str2Arr[i])];
}
}
return r;
}
convert(36);
方法三:
var convert=(function() {
//1 5 10 50 100 500 1000
//I V X L C D M
var i=0;
var arr=[["I","V"],["X","L"],["C","D"],["M"]]; //检索的数组缓存起来
return function(num){
var str="";
var num_arr=String(num).split("");
for(var i=0,l=num_arr.length;i<l;i++){ //对每一位的数字进行处理
var x=parseInt( num_arr[i] );
str+=handle(arr[l-1-i],arr[l-i],x); //传参
}
return str;
};
})();
function handle(arr,big_arr,x){ //这里是对输入的x数字进行处理,arr和big_arr根据传参确定,这里对应的是罗马数字规则
var res="";
if( x===0 ){
return res;
}
if( x<=3 ){
for(i=0;i<x;i++){
res+=arr[0];
}
}else if( x==4 ){
res=arr[0]+arr[1];
}else if( x==9 ){
res=arr[0]+big_arr[0];
}else{ //大于等于5但是小于9的
var cha=x-5;
res=arr[1];
for(i=0;i<cha;i++){
res+=arr[0];
}
}
return res;
}
convert(36);