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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2040
Problem 40 「チャンパーノウン定数」 †
チャンパーノウン定数から指定された桁を取り出し、その積をこたえる問題。

dells(N,Keta,N1,Keta1):-
	N=<9*(10^Keta)*(Keta+1),
	!,
	N1 is N-1, 
	Keta1 is Keta+1.
dells(N,Keta,ResultN,ResultK):-
	N1 is N-9*(10^Keta)*(Keta+1),
	Keta1 is Keta+1,
	dells(N1,Keta1,ResultN,ResultK).

hit2(Num,1,Result):-!,Result is Num mod 10.
hit2(Num,P,Result):-
	Num1 is Num//10,
	P1 is P-1,
	hit2(Num1,P1,Result).
hit(N,Keta,Num2):-
	Num is 10^(Keta-1)+N//Keta,
	P is Keta-(N mod Keta),
	hit2(Num,P,Num2).
calc(N,N2):-
	dells(N,0,N1,Keta),
	hit(N1,Keta,N2).

calcA(N):-
	 member(E,[1,10,100,1000,10000,100000,1000000]),
	 calc(E,N).
mult([],M,M):-!.
mult([X|Xs],M,Result):-
	M1 is M*X,
	mult(Xs,M1,Result).

main:-
	findall(E,calcA(E),Es),
	mult(Es,1,Ans),
	write(Ans).
最終更新:2014年12月03日 11:43