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

original page : http://ja.doukaku.org/250/

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

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

1. 0x12437308CCB6 →20080902065334

2.0x2C9C1227FC6520B →200904012311450123

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

#8984

original page : http://ja.doukaku.org/comment/8984/

変換機能は組み込みでありますが、内部的にはdouble型なのでdouble型のビット長(通常64bit)を超えると結果がおかしくなってしまいます。

gmpライブラリーを使うと任意の多倍長整数が扱えます。

# builtin
> 0x12437308CCB6
[1] 20080902065334
> 0x2C9C1227FC6520B
[1] 200904012311450112
> typeof(0x2C9C1227FC6520B)
[1] "double"

# gmp
> library(gmp)
> as.bigz("0x12437308CCB6")
[1] "20080902065334"
> as.bigz("0x2C9C1227FC6520B")
[1] "200904012311450123"