その時々

その時々で違うんです。特に決まっていないんです。

プログラミングドリル No.2の解答例

問題の解答例です。

python

10.16.py

import sys

argvs = sys.argv
argc = len(argvs)

if argc != 2:
    print 'Usage: # python %s decimal' % argvs[0]
    quit()

print 'result: %s' % hex(int(argvs[1]))

実行例

$ python 10to16.py 123456
result: 0x1e240
java

DecimalToHex.java

import java.math.*;

class DecimalToHex
{
    public static void main(String[] args)
    {
	BigInteger arg = new BigInteger(args[0]);
	System.out.println("result:" + arg.toString(16));
    }
}

実行例

$ java DecimalToHex 123456
result:1e240
JavaScript
<script>
  i = parseInt("123456");
  document.write("result:" + i.toString(16));
</script>

実行例

result:1e240

今度は1兆に対応しています。

CommonLisp

10to16.lisp

(defun second-args ()
  (let (d-num)
    (setq d-num
	  (or
	   (second *posix-argv*)
	   "0"))))

(format t "result: ~x~%" (parse-integer (second-args)))

実行例

$ sbcl --script 10to16.fasl 123456
result: 1E240
C

10to16.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *args[])
{
  unsigned long long data;

  data = atoll(args[1]);
  printf("result: %#llx\n", data);

  return 0;
}

実行例

$ ./10to16 123456
result: 0x1e240
疑似コード
while x > 16{
  answer = hex(x mod 16) + answer
  x /= 2
}

answer = hex(x mod 2) + answer

10進数を16進数にするには、2進数のときと同じように10進数を16で割った余りを求めて商が16より小さくなるまで繰り返していけばいいのです。
16進数の場合は、10=A、11=B ... 15=Fとします。