この間の日曜日、基本情報処理技術者試験を受けに行ってきました。 合格するかどうかは正直微妙…
そこでこんな設問が
午後の問題 問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 件のコメント:
コメントを投稿