2010/07/07

10進数と2進数の変換

もちろん書く必要はないのですが、ラフスケッチ的な。
(define (quotient-down n divider)
(let loop ((n n)(acc '()))
(if (zero? n)
acc
(loop (quotient n divider)(cons n acc)))))
(define (number-list->number lis)
(string->number (string-join (map x->string lis) "")))
(define (dec->bin n)
(number-list->number
(map (lambda (e)
(if (zero? (remainder e 2)) 0 1))
(quotient-down n 2))))
(dec->bin 172)
(number->string 172 2)
(dec->bin 60)
(number->string 60 2)
(dec->bin 128)
(number->string 128 2)
(dec->bin 100)
(number->string 100 2)
(define (number->number-list n)
(map (compose string->number string)
(string->list (number->string n))))
(use srfi-1)
(define (reverse-index-expt ls)
(unfold null?
(lambda (s)
(expt 2 (- (length s) 1)))
cdr ls))
(define (bin->dec n)
(let1 bls (number->number-list n)
(apply + (filter-map (lambda (b e)
(and (= b 1) e))
bls
(reverse-index-expt bls)))))
(bin->dec 10011001)
(bin->dec 1111)
(bin->dec 1101)
(bin->dec 1110)
view raw dec2bin.scm hosted with ❤ by GitHub

プログラミングGauche

0 件のコメント:

コメントを投稿