smeghead #1873(2007/08/05 13:12 GMT) [ Common Lisp ] Rating0/0=0.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
(defvar *kanji-digits* #("" "一" "二" "三" "四" "五" "六" "七" "八" "九")) (defvar *kanji-10000-units* #("" "万 " "億 " "兆 " "京 ")) (defvar *kanji-units* #("" "十" "百" "千")) (defun n-kanji (c unit) (concatenate 'string (cond ((and (equal c "1") (> (mod unit 4) 0)) "") (t (aref *kanji-digits* (parse-integer c)))) (cond ((not (equal c "0")) (aref *kanji-units* (mod unit 4)))))) (defun nnnn-kanji (str unit kanji) (if (zerop (length str)) kanji (nnnn-kanji (subseq str 1) (1+ unit) (concatenate 'string (n-kanji (subseq str 0 1) unit) kanji)))) (defun number-kanji (str) (if (equal str "0") "零" (labels ((rec (str unit kanji) (let ((len (length str))) (if (zerop len) kanji (let ((sub-str (if (> len 4) (subseq str 0 4) (subseq str 0 len)))) (rec (if (> len 4) (subseq str 4) "") (+ unit 4) (concatenate 'string (if (equal sub-str (make-string (length sub-str) :initial-element #\0)) "" (concatenate 'string (nnnn-kanji sub-str unit "") (cond ((> (mod unit 4) 0) "") (t (aref *kanji-10000-units* (floor unit 4)))))) kanji))))))) (rec (reverse str) 0 "")))) (defun main () (loop as n = (progn (format t "input number:") (read-line *standard-input* nil nil)) do (handler-case (progn (if (equal (string-trim '(#\Space #\Tab #\Newline) n) "") (return)) (format t "~a~%" (number-kanji n))) (error (c) (format t "error! it isn't integer.~%"))))) (main)
Rating0/0=0.00-0+
[ reply ]
smeghead
#1873()
[
Common Lisp
]
Rating0/0=0.00
(defvar *kanji-digits* #("" "一" "二" "三" "四" "五" "六" "七" "八" "九")) (defvar *kanji-10000-units* #("" "万 " "億 " "兆 " "京 ")) (defvar *kanji-units* #("" "十" "百" "千")) (defun n-kanji (c unit) (concatenate 'string (cond ((and (equal c "1") (> (mod unit 4) 0)) "") (t (aref *kanji-digits* (parse-integer c)))) (cond ((not (equal c "0")) (aref *kanji-units* (mod unit 4)))))) (defun nnnn-kanji (str unit kanji) (if (zerop (length str)) kanji (nnnn-kanji (subseq str 1) (1+ unit) (concatenate 'string (n-kanji (subseq str 0 1) unit) kanji)))) (defun number-kanji (str) (if (equal str "0") "零" (labels ((rec (str unit kanji) (let ((len (length str))) (if (zerop len) kanji (let ((sub-str (if (> len 4) (subseq str 0 4) (subseq str 0 len)))) (rec (if (> len 4) (subseq str 4) "") (+ unit 4) (concatenate 'string (if (equal sub-str (make-string (length sub-str) :initial-element #\0)) "" (concatenate 'string (nnnn-kanji sub-str unit "") (cond ((> (mod unit 4) 0) "") (t (aref *kanji-10000-units* (floor unit 4)))))) kanji))))))) (rec (reverse str) 0 "")))) (defun main () (loop as n = (progn (format t "input number:") (read-line *standard-input* nil nil)) do (handler-case (progn (if (equal (string-trim '(#\Space #\Tab #\Newline) n) "") (return)) (format t "~a~%" (number-kanji n))) (error (c) (format t "error! it isn't integer.~%"))))) (main)Rating0/0=0.00-0+
[ reply ]