patagonia2 发表于 2016-05-22 14:42

在线等,谁会算回文


[*]事实上,一个回文从两头读是相同的。
[*]由两位数相乘得到的最大回文是:9009=91*99。


试求得由 三位数 相乘得到的 最大 回文。
题目很容易理解。
但是,代码写出来困难。

大圣谁会算回文。
希望大圣能够指导, 在线等,急死了

patagonia2 发表于 2016-05-23 13:37

%-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().

patagonia2 发表于 2016-05-23 13:48

谁会算 {:yxh4:}

100 * 100 到 999 * 999

patagonia2 发表于 2016-05-23 15:35

感受一下这个慢{: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().

patagonia2 发表于 2016-05-24 17:15

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().

patagonia2 发表于 2016-05-24 18:01

执行结果快了12倍,
这个性能的提升还是比较可观的。
页: [1]
查看完整版本: 在线等,谁会算回文