JavaScriptは1-4000内のアラビア数字をローマ字に変換することを実現しました.

3459 ワード

毎日勉強を始める前に、いつもアルゴリズムの問題に来て、気をつけます.
今日のこの道はこうです.
convert(1006)は「MVI」に戻るべきです. convert(1023)は「MXIII」に戻るべきです. convert(2014)は「MMXIV」に戻るべきです. convert(3999)は、「MMMCMXCIX」を返すべきである.
鈴を付けて、1-4000のアラビア数字をローマ字に変換します.
この問題を作りたいですが、まず何がロマ数字ですか?資料を調べてみます.
一、ローマ字とは何ですか?
    ロマ数字は一番早い数字の表示方式で、アラビア数字より2000年以上前に、ロマから起源しました.今私たちが最もよく見ているローマ字の数字は時計の文字板の記号です.Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ、Ⅶ、VI、VI、Ⅸ、Ⅹ、Ⅺ、Ⅻ…アラビア数字に対応しています.1、2、3、4、5、6、7、8、9、10、11、12です.アラビア数字は古代のインド人によって発明されたもので、アラビア人によってヨーロッパに伝えられました.ヨーロッパ人にアラビア数字と間違えられました.
二、ロマ数字の表記方法
    基本文字:
        I、V、X、L、C、D、M
    該当するアラビア数字は次のように表されます.
        1、5、10、50、100、500、1000
    (1)同じ数字を連写して表示する数は、これらの数字を加算した数に等しい.例えば、Ⅲ=3.
    (2)小さい数字は大きな数字の右側にあり、表示されている数はこれらの数字の合計数に等しい.例えば、VI=8;Ⅻ= 12;
    (3)小さい数字(Ⅰ、X、Cに限る)は大きな数字の左側にあり、表した数は大きな数から小数を減らす数に等しい.Ⅳ=4;Ⅸ= 9;
    (4)正常に使用する場合、連記した数字は3回以上繰り返してはいけません.(文字盤の4時「III」は例外)
    (5)一つの数の上に横線を引いて、この数が1000倍に拡大することを示します.
やはり複雑です.主なポイントは:1)連続して書いた数字は三回を超えてはいけません.つまりIIIは3までしか書けません.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);
ここでflor()の方法を使って、flor()の方法を使って、「下捨取余」というふうにすれば、一人一人がどの数を取ったら、配列種のローマ数字位置に対応して賦課されますか?so easy.