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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2055
Problem 55 「Lychrel数」 †
10000以下のLychrel数がいくつあるかという問題。
地道な計算以外とくに思いつきません。
ところで50か51正答者掲示板を見ても解答にばらつきがありますね。

to_list(0,[]):-!.
to_list(N,[X|Result]):-
	X is N mod 10,
	N1 is N //10,
	to_list(N1,Result).

to_num([],Num,Num):-!.
to_num([X|Xs],Num,Result):-
	Num1 is Num*10+X,
	to_num(Xs,Num1,Result).


calc(51,_):-!.
calc(T,Num):-
	to_list(Num,List),
	(T>0,reverse(List,List)->!,fail;
	T1 is T+1,
	to_num(List,0,Num1),
 	Num2 is Num+Num1,
	 calc(T1,Num2)).

search(10000,Ans):-!,
	write(Ans).
search(N,Ans):-

	(calc(0,N)->Ans1 is Ans+1;Ans1 is Ans),
	N1 is N+1,
	search(N1,Ans1).

main:-
	search(1,0).
最終更新:2014年12月08日 19:12