解法一:回文数+高精度

模拟,注意输入范围,需要使用高精度。

  1. import java.io.*;
  2. import java.math.BigInteger;
  3. public class Main {
  4. public static void main(String[] args) throws IOException {
  5. StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
  6. PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
  7. in.nextToken();
  8. BigInteger N = new BigInteger(String.valueOf((long)in.nval));
  9. in.nextToken();
  10. int K = (int) in.nval;
  11. for (int i = 0; i < K; ++i) {
  12. if (isPalindromic(N)) {
  13. out.println(N);
  14. out.println(i);
  15. out.flush();
  16. return;
  17. }
  18. N = plus(N);
  19. }
  20. out.println(N);
  21. out.println(K);
  22. out.flush();
  23. }
  24. private static BigInteger plus(BigInteger n) {
  25. BigInteger s = new BigInteger("0");
  26. char[] chars = n.toString().toCharArray();
  27. for (int i = chars.length - 1; i >= 0; --i) {
  28. BigInteger bit = new BigInteger(String.valueOf(chars[i] - 48));
  29. s = s.multiply(BigInteger.TEN).add(bit);
  30. }
  31. return s.add(n);
  32. }
  33. private static boolean isPalindromic(BigInteger n) {
  34. boolean flag = true;
  35. char[] chars = n.toString().toCharArray();
  36. int len = chars.length;
  37. for (int i = 0; i < len / 2; ++i) {
  38. if (chars[i] != chars[len - i - 1]) {
  39. flag = false;
  40. break;
  41. }
  42. }
  43. return flag;
  44. }
  45. }