Problem 8 「数字列中の最大の積」 †
以下の1000桁の数字から5つの連続する数字を取り出して その積を計算する. そのような積の中で最大のものの値はいくらか.
略
詳細はリンク先参照のこと。
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%208
解法
Prolog言語
数字は改行を抜いてテキストエディタで文字列とした
max(A,B,B):-A<B,!.
max(A,_,A):-!.
to_num([],[]):-!.
to_num([X|Xs],[Y|Ys]):-
!,
Y is X-48,
to_num(Xs,Ys).
calc([_,_,_,_],Max,Max):-!.
calc([X1,X2,X3,X4,X5|Rest],Max,Result):-
!,
Mult is X1*X2*X3*X4*X5,
max(Max,Mult,Max1),
calc([X2,X3,X4,X5|Rest],Max1,Result).
main8:-
open('pe8.txt',read,IS),
read_term(IS,Codes,[]),
close(IS),
to_num(Codes,Nums),
calc(Nums,0,Ans),
write(Ans).
max(A,_,A):-!.
to_num([],[]):-!.
to_num([X|Xs],[Y|Ys]):-
!,
Y is X-48,
to_num(Xs,Ys).
calc([_,_,_,_],Max,Max):-!.
calc([X1,X2,X3,X4,X5|Rest],Max,Result):-
!,
Mult is X1*X2*X3*X4*X5,
max(Max,Mult,Max1),
calc([X2,X3,X4,X5|Rest],Max1,Result).
main8:-
open('pe8.txt',read,IS),
read_term(IS,Codes,[]),
close(IS),
to_num(Codes,Nums),
calc(Nums,0,Ans),
write(Ans).
0 件のコメント:
コメントを投稿