多倍長電卓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]; } }
コメント