2014年3月12日水曜日

プロジェクトオイラー問20

Problem 20 「階乗の数字和」 

n × (n - 1) × ... × 3 × 2 × 1 を n! と表す.
例えば, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800 となる.
この数の各桁の合計は 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 である.
では, 100! の各桁の数字の和を求めよ.
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2020


解法
Prolog言語



fact(0,1):-!.
fact(N,Result):-
       !,
       N1 is N-1,
       fact(N1,Re),
       Result is Re*N.
sum([],0):-!.
sum([X|Xs],Result):-
       !,
       sum(Xs,Re),
       Result is Re+X-48.

main20:-
       fact(100,F100),
       number_codes(F100,List),
       sum(List,Ans),
       write(Ans).

0 件のコメント:

コメントを投稿