在线等,谁会算回文
[*]事实上,一个回文从两头读是相同的。
[*]由两位数相乘得到的最大回文是:9009=91*99。
试求得由 三位数 相乘得到的 最大 回文。
题目很容易理解。
但是,代码写出来困难。
大圣谁会算回文。
希望大圣能够指导, 在线等,急死了 %-module(e).
-define (PP (V), io:format ("~s = ~p~n", [??V, V])).
palindrome(X) ->
Y = integer_to_list(X),
Y == lists:reverse(Y).
main(_) ->
TEST1 = palindrome(12321),
TEST2 = palindrome(123210),
?PP (TEST1), ?PP (TEST2),
halt().
谁会算 {:yxh4:}
100 * 100 到 999 * 999 感受一下这个慢{:yxh4:}
谁会折腾高效的写法。{:yxh79:}%-module(x).
-define (P (V), io:format ("~p ", )).
-define (PP (V), io:format ("~n~s = ~p~n", [??V, V])).
loop (A, A, A, _, MAX) -> MAX;
loop (A, B, B, P, MAX) -> loop (A + 1, A + 1, B, P, MAX);
loop (A, B, C, P, MAX) ->
AB = A * B,
case AB > MAX andalso P(AB) of
true -> ?P (AB), loop (A, B + 1, C, P, AB);
____ -> loop (A, B + 1, C, P, MAX) end.
main(_) ->
Palindrome = fun (X) ->
Y = integer_to_list (X),
Y == lists:reverse (Y) end,
A = 100,
B = 999 + 1,
MAX = loop ( A, A, B, Palindrome, 0),
?PP (MAX),
halt().
1.2 秒 {:yxh82:}
-mode(native).-module(p).
-mode(native).
-define(P(V), io:format("~p ", )).
-define (PP (V), io:format ("~n~s = ~p~n", [??V, V])).
loop(A, A, A, _, MAX) -> MAX;
loop(A, B, B, P, MAX) -> loop(A + 1, A + 1, B, P, MAX);
loop(A, B, C, P, MAX) ->
AB = A * B,
case AB > MAX andalso P(AB) of
true -> ?P(AB), loop(A, B + 1, C, P, AB);
____ -> loop(A, B + 1, C, P, MAX)
end.
palindrome(X) ->
Y = integer_to_list(X),
Y == lists:reverse(Y).
main(_) ->
A = 100,
B = 999 + 1,
Palindrome = fun (Y) -> palindrome(Y) end,
MAX = loop(A, A, B, Palindrome, 0),
?PP(MAX),
halt().
执行结果快了12倍,
这个性能的提升还是比较可观的。
页:
[1]