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)大左小右は+、小左大右は−で、具体的な数字は便利なものを表す.
上記の規則がある以上、私達は書くことができます.まず複雑な版を作ります.
超複雑版:
スーパー簡単版:
今日のこの道はこうです.
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.