Problem 16 - 2の1000乗

簡単!

Problem 16 - PukiWiki

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順にやってくかな。