どうかく?16進数から10進数の変換

どうかく?orgの問題から

問題
16進数を10進数に変換してください。

ただし、入出力は文字列とし、次の変換は最低必ずできなければいけないこととします。

0x12437308CCB6 →20080902065334
0x2C9C1227FC6520B →200904012311450123

あわせて、扱える最大の整数も明らかにしてください。

とりあえず何も考えずに作ってみた

#! /usr/bin/gawk
# jussin_henkan.awk
# usage:gawk -f jussin_henkan.awk 0xhoge(16進数)
# 16進数から10進数の変換


BEGIN{
juuroku = ARGV[1];
keta = length(juuroku);
keta2 = keta - 3;
split(juuroku,s,"")
for(n = 3;n <= keta;n++){
if(s[n] == "a"){
s[n] = 10;
}else if(s[n] == "b"){
s[n] = 11;
}else if(s[n] == "c"){
s[n] = 12;
}else if(s[n] == "d"){
s[n] = 13;
}else if(s[n] == "e"){
s[n] = 14;
}else if(s[n] == "f"){
s[n] = 15;
}
ans = ans + s[n] * 16 ^ keta2;
keta2--;
}
print ans
}


んで、実行してみると


$ gawk -f jussin_henkan.awk 0x2c9c1227fc6520b
2.00904e+17

ガーン(泣)
多分アプローチが違うだろうな。
もう少し考えてみるか・・・。

しかし、この「どうかく?org」は今ではアカウント登録も出来ないし、言語一覧から特定言語のページをクリックするとエラー表示するのね。もう今更感があるのかな・・・。