この間の日曜日、基本情報処理技術者試験を受けに行ってきました。 合格するかどうかは正直微妙…
そこでこんな設問が
午後の問題 問6: [プログラムの説明] 金額を表すときのように、整数を3けた区切り形式の文字列に変換する関数 convert である。(以下略)表 変換例 ┌────┬────────────┐ │ 整数 │3けた区切り形式の文字列│ ├────┼────────────┤ │1234567 │1,234,567 │ │ -57482 │-57,482 │ │ 63 │63 │ │-999999 │-999,999 │ └────┴────────────┘
C言語での問題だったけど、なんとなく Lisp で解いてみた。
# 別に解答間違ったからその腹いせにじゃあないです :-(
((lambda (int &optional (interval 3) (comma ","))
(reverse
(with-output-to-string (*standard-output*)
(with-input-from-string
(in (reverse (princ-to-string (abs int))))
(do ((i 1 (1+ i)))
((not (listen in)))
(princ (read-char in))
(if (and (zerop (mod i interval))
(listen in))
(princ comma)))
(if (minusp int)
(princ "-"))))))
-123456789) ; => "-123,456,789"
でも CLer なら一行で十分だよね、というオチ。
(format nil "~:D" -123456789) ; =>"-123,456,789"
0 件のコメント:
コメントを投稿