多倍長電卓LMを使って基数変換をする
基数変換、16進数から10進数への変換などをしたい時、2,10,16などの代表的なものや、
比較的小さい(15桁くらい)の変換ならExcelやインターネットで公開されているツールでできる。
ただ、ある程度以上長くなるとintやlongの限界を超えてしまうため、多倍長整数での計算が必要となる。
pythonや各言語のライブラリを使っても可能だが、今回は「多倍長電卓LM」を使うことにした。
この電卓は多倍長整数を扱えるだけでなく、C言語の文法をベースとしたコードを書くことである程度の計算が出来るのも特徴だ。
この多倍長電卓LMで基数変換をするコードを書いた。
一旦メモ帳などにコピーして書き換えてから多倍長電卓に貼り付けることで実行できる。
cardが変換前の基数、card2が変換後の基数。
order,order2がそれぞれ変換前後の値の桁数。
values[0]~に各桁の10進法での値を入れる。
values[0]が一番下の桁の値だ。
そして配列values2の各要素に変換後の各桁の値がはいる。
9以降はアルファベットをaから用いているので、36進数まで対応している。
比較的小さい(15桁くらい)の変換ならExcelやインターネットで公開されているツールでできる。
ただ、ある程度以上長くなるとintやlongの限界を超えてしまうため、多倍長整数での計算が必要となる。
pythonや各言語のライブラリを使っても可能だが、今回は「多倍長電卓LM」を使うことにした。
この電卓は多倍長整数を扱えるだけでなく、C言語の文法をベースとしたコードを書くことである程度の計算が出来るのも特徴だ。
この多倍長電卓LMで基数変換をするコードを書いた。
一旦メモ帳などにコピーして書き換えてから多倍長電卓に貼り付けることで実行できる。
cardが変換前の基数、card2が変換後の基数。
order,order2がそれぞれ変換前後の値の桁数。
values[0]~に各桁の10進法での値を入れる。
values[0]が一番下の桁の値だ。
そして配列values2の各要素に変換後の各桁の値がはいる。
9以降はアルファベットをaから用いているので、36進数まで対応している。
var card = ;
var card2 = ;
var order = ;
var order2 = ;
var values[order];
var values2[order2];
var answer=0;
values[0] = ;
values[1] = ;
values[2] = ;
values[3] = ;
values[4] = ;
values[5] = ;
values[6] = ;
values[7] = ;
values[8] = ;
values[9] = ;
values[10] = ;
values[11] = ;
values[12] = ;
values[13] = ;
values[14] = ;
values[15] = ;
values[16] = ;
values[17] = ;
values[18] = ;
values[19] = ;
values[20] = ;
for(i=0;i<order;i++){
answer += values[i]*card^i;
}
print answer;
var i = 0;
while(answer >0){
values2[i] = answer%card2;
answer = floor(answer/card2);
i++;
}
for(i=0;i<order2;i++){
switch(values2[i]){
case 10:
print "A";
break;
case 11:
print "B";
break;
case 12:
print "C";
break;
case 13:
print "D";
break;
case 14:
print "E";
break;
case 15:
print "F";
break;
case 16:
print "G";
break;
print "H";
break;
case 18:
print "I";
break;
case 19:
print "J";
break;
case 20:
print "K";
break;
case 21:
print "L";
break;
case 22:
print "M";
break;
case 23:
print "N";
break;
case 24:
print "O";
break;
case 25:
print "P";
break;
case 26:
print "Q";
break;
case 27:
print "R";
break;
case 28:
print "S";
break;
case 29:
print "T";
break;
case 30:
print "U";
break;
case 31:
print "V";
break;
case 32:
print "W";
break;
case 33:
print "X";
break;
case 34:
print "Y";
break;
case 35:
print "Z";
break;
default:
print values2[i];
}
}
コメント