fork download
  1. let rev =
  2. let rec aux acc m =
  3. if m = 0 then acc else aux (acc * 10 + m mod 10) (m / 10)
  4. in aux 0
  5. let f n =
  6. let rec aux a b = match (a = rev a, b = rev b) with
  7. true, true -> [a; b]
  8. | true, false -> [a]
  9. | false, true -> [b]
  10. | false, false -> aux (a - 1) (b + 1)
  11. in if n = rev n then [n] else aux (n - 1) (n + 1)
  12. let g n =
  13. Printf.printf "入力: %d\n" n;
  14. List.iter (Printf.printf "出力: %d\n") (f n);
  15. let () = List.iter g [0; 17; 100]
Success #stdin #stdout 0s 5292KB
stdin
Standard input is empty
stdout
入力: 0
出力: 0

入力: 17
出力: 22

入力: 100
出力: 99
出力: 101