プログラミングドリル 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とします。