打印最大的 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. }

6. String res = "0";

8. while (true) {
9. boolean all9 = true;

11. res = Plus(res, 1);
12. System.out.println(res);

14. for (int i = 0; i < res.length(); i++) {
15. if (res.charAt(i) != '9') {
16. all9 = false;
17. break;
18. }
19. }

21. if (all9 && res.length() == n) {
22. break;
23. }
24. }
25. }

27. private String Plus(String t, int i) {
28. char[] chars = t.toCharArray();
29. StringBuilder res = new StringBuilder();
30. chars[chars.length - 1] += i;

32. boolean flag = false;
33. for (int j = chars.length - 1; j >= 0; j--) {
34. int a = chars[j];
35. if (flag) {
36. a++;
37. flag = false;
38. }

40. if (a > '9') {
41. flag = true;
42. a = a - '9' + '0' - 1;
43. }

45. res.append((char) a);
46. }
47. if (flag) {
48. res.append('1');
49. }

51. return res.reverse().toString();
52. }