打印最大的 n 位数

输入n,打印出 1 到最大的 n 位十进制数。比如输入3,则打印出1、2、3 直到最大的 3 位数 999。

解题思路

  1. n 可能很大,导致输出的数字超过 int 或者 long
  1. public void PrintN(int n) {
  2. if (n <= 0) {
  3. return;
  4. }
  5. String res = "0";
  6. while (true) {
  7. boolean all9 = true;
  8. res = Plus(res, 1);
  9. System.out.println(res);
  10. for (int i = 0; i < res.length(); i++) {
  11. if (res.charAt(i) != '9') {
  12. all9 = false;
  13. break;
  14. }
  15. }
  16. if (all9 && res.length() == n) {
  17. break;
  18. }
  19. }
  20. }
  21. private String Plus(String t, int i) {
  22. char[] chars = t.toCharArray();
  23. StringBuilder res = new StringBuilder();
  24. chars[chars.length - 1] += i;
  25. boolean flag = false;
  26. for (int j = chars.length - 1; j >= 0; j--) {
  27. int a = chars[j];
  28. if (flag) {
  29. a++;
  30. flag = false;
  31. }
  32. if (a > '9') {
  33. flag = true;
  34. a = a - '9' + '0' - 1;
  35. }
  36. res.append((char) a);
  37. }
  38. if (flag) {
  39. res.append('1');
  40. }
  41. return res.reverse().toString();
  42. }