challenge 16進数から10進数の変換

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

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

  1. 0x12437308CCB6 →20080902065334

2.0x2C9C1227FC6520B →200904012311450123

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

Posted feedbacks - OCaml

F#で、入力HEX文字列は、コマンドライン引数で指定します。
uint64 の範囲で実行可
実行例:
>hex2dec 0x12437308ccb6
20080902065334

>hex2dec 0x2c9c1227fc6520b
200904012311450123
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#light

open System

[<STAThread>]
[<EntryPoint>]
let main(args) = 
    match args with 
    | [|hexString|] -> 
        printfn "%u" <| uint64 hexString
    | _ -> 
        printfn "Usage Hex2dec hexString"
    0

1
2
let [|hex_string|] = Sys.argv;;
print_endline (Int64.to_string (Int64.of_string hex_string));;

F# で、Math.BigInt を使って桁の制限をなくしたバージョン
実行例:
> hex2dec "0x12437308CCB6";;
val it : Math.BigInt = 20080902065334I
> hex2dec "0x2C9C1227FC6520B";;
val it : Math.BigInt = 200904012311450123I
1
2
3
4
5
6
7
8
#light

let hex2dec (s:string) =
    let hs = s.[2..] //先頭の0x を取り除く
    let intToBigInt (x:int) = Math.BigInt(x)
    let bs = 16I
    let times_base x y = x * bs + y
    Seq.fold times_base 0I <| Seq.map (intToBigInt << int << (^) "0x" << string) hs

Index

Feed

Other

Link

Pathtraq

loading...