Problem 16 - 2の1000乗
簡単!
2^15 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。
同様にして、2^1000 の各数字の合計を求めよ。
はいはい。
(define (digit->integer c) (if (char-numeric? c) (- (char->integer c) (char->integer #\0)) #f)) (fold (lambda (c acc) (+ (digit->integer c) acc)) 0 (string->list (number->string (expt 2 1000)))) ; 1366
変換ばっかり。
やっぱり
ちと気に入らないので書き直し。
別に文字とか使わなくてもいいか。と。
(define (number->list n) (define (iter acc n) (let ((q (quotient n 10)) (m (cons (modulo n 10) acc))) (if (zero? q) m (iter m q)))) (iter '() n)) (apply + (number->list (expt 2 1000))) ; 1366
Schemeで、do-while的な事をやってみた。
(if (ほにゃらら))ではなく、(ほにゃらら (if ..))と書くと、do-whileになる。再帰で書けば、do-whileは無用の産物ダネ。
次の問題は面倒そうなので、difficulty順にやってくかな。