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

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

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

  1. 0x12437308CCB6 →20080902065334

2.0x2C9C1227FC6520B →200904012311450123

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

Posted feedbacks - D

言語組み込みで扱える最大整数は64bitのlongです。なぜか標準ライブラリに16進文字列から整数に変換する関数がないのでC99からstrtollを借ります。

標準ライブラリに多倍長整数はあります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import core.stdc.stdlib: strtoll;
import std.bigint: BigInt;
import std.stdio;

void main() {
    // longは64bit
    long x = strtoll("0x12437308CCB6", null, 16);
    writeln(x); // 20080902065334
    
    // BigIntは多倍長整数
    BigInt y = "0x2C9C1227FC6520B";
    writeln(y); // 200904012311450123
}

苦肉の策です(笑) 全く、リテラルは2進数までサポートしているくせに…
1
2
3
4
5
6
import std.stdio;

void main() {
    long x = mixin("0x12437308CCB6");
    writeln(x); // 20080902065334
}

Index

Feed

Other

Link

Pathtraq

loading...