1. 程式人生 > >JavaScript實現1-4000內阿拉伯數字轉換為羅馬數字

JavaScript實現1-4000內阿拉伯數字轉換為羅馬數字

還是挺複雜滴,主要的點就是:1)連寫的數字不能超過三次,也就是III只能寫到3,想玩4,6,7...就得想招啦。2)大左小右為+,小左大右為-,具體數字表示起來取方便的那種。
既然有了上述規則,我們就可以寫啦,先上一個複雜版。

超級複雜版: 

  var a=0;
  var b=0;
  var c=0;
  var d=0;
  var y=num.toString();   
  var newN=y.split("");//數字分開成陣列['3','6']
  var num1=newN.length;
   if(num1==1){
    d=num;
  }else if(num1==2){
    c=parseInt(newN[0]);
    d=parseInt(newN[1]);
  }else if(num1==3){
    b=parseInt(newN[0]);
    c=parseInt(newN[1]);
    d=parseInt(newN[2]);
  }else if(num1==4){
    a=parseInt(newN[0]);
    b=parseInt(newN[1]);
    c=parseInt(newN[2]);
    d=parseInt(newN[3]);
  }
  var rea="";
  var reb="";
  var rec="";
  var red="";
  for(i=1;i<=a;i++){
    rea=rea+"M";
  }
  if(b<4){
 for(i=1;i<=b;i++){
    reb=reb+"C";
  }
  }else if(b==4){
    reb="CD";
  }else if(b<9){
    reb="D";
    for(i=1;i<=b-5;i++){
    reb=reb+"C";
  }
  }else if(b==9){
    reb="CM";
  }
    if(c<4){
    for(i=1;i<=c;i++){
    rec=rec+"X";
  }
  }else if(c==4){
    rec="XL";
  }else if(c<9){
    rec="L";
    for(i=1;i<=c-5;i++){
      rec=rec+"X";
    }
  }else if(c==9){
    rec="XC";
  }
    if(d<4){
    for(i=1;i<=d;i++){
    red=red+"I";
  }
  }else if(d==4){
    red="IV";
  }else if(d<9){
        red="V";
    for(i=1;i<=d-5;i++){
      red=red+"I";}
  }else if(d==9){
    red="IX";
  } 
 var result=rea+reb+rec+red;
 return result;
}
簡單來說,分出4位,把每一位的情況都做一個判斷。(。・∀・)ノ゙嗨,您累不累喲。作為猿,我們的存在就是為了偷懶嘛。於是乎,只需要一個小小的方法,就可以避免一大串的判斷。

超級簡單版:

  function convert(num) {
  var a=[["","I","II","III","IV","V","VI","VII","VIII","IX"],  ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"],  
["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"],
 ["","M","MM","MMM"]];  
  var i=a[3][Math.floor(num/1000)];
  var j=a[2][Math.floor(num%1000/100)];
  var k=a[1][Math.floor(num%100/10)];
  var l=a[0][num%10];
  return  i+j+k+l;
   
}

convert(36);
這裡用到了floor()方法,floor()方法用來“下舍取餘”這樣的話,每一位取到哪個數,就賦值對應陣列種的羅馬數字位置,搞定。so easy。