n × (n - 1) × ... × 3 × 2 × 1 を n! と表す.
例えば, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800 となる.
この数の各桁の合計は 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 である.
では, 100! の各桁の数字の和を求めよ.
例えば, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800 となる.
この数の各桁の合計は 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 である.
では, 100! の各桁の数字の和を求めよ.
素直に100!を求めて, 各桁の和を求めます.
手続きは次のようになります.
(require srfi/1) (define (decimal-format nbr) (define (loop ans n) (if (= 0 n) ans (loop (cons (remainder n 10) ans) (quotient n 10)))) (loop () nbr))
計算します. foldを使って100!を計算をしています.
ようこそ DrRacket, バージョン 5.3.3 [3m]. 言語: Pretty Big; memory limit: 2048 MB. > (fold * 1 (iota 99 1)) 933262154439441526816992388562667004907159682643816214685929 638952175999932299156089414639761565182862536979208272237582 511852109168640000000000000000000000 > (fold + 0 (decimal-format (fold * 1 (iota 99 1)))) 648 >
0 件のコメント:
コメントを投稿