打印1到最大的n位数(需复习)
题目
输入数字n,按顺序打印出从1最大的n位十进制数。比如输入1,则打印出1、2、3一直到最大的3位数即999
思路
陷阱:n过大时是大数问题,不能简单用int或者long数据输出,需要采用字符串或者数组表达大数。
解决方法:通过字符数组char[]来进行输出数字。
方法一:
在字符串表达的数字上模拟加法;
把字符串表达的数字打印出来。
方法二:
采用递归将每一位都从0到9排列出来;
把字符串表达的数字打印出来。
测试用例
功能测试(输入1、2、3)
特殊测试(输入0、-1)
int与char类型之间的相互转换
- int类型转char类型,将数字加一个’0’,并强制类型转换成char即可、
- char类型转int类型,将字符减去一个‘0’
1 | public static void main(String[] args) { |
java代码
非递归法
每次加一并打印这个数,直到最大的n位数并终止递增
1 | /** |
递归方法
如果在数字前面补0.就会发现n位所有十进制其实就是n个从0到9的全排列。也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的十进制数。
只是在打印的时候,排在前面的0不打印出来。
全排列用递归很容易表达,数字的每一位都可能是0~9中的一个数,然后设置下一位。
递归终止条件是我们已经设置了数字的最后一位。
1 | public class Print1ToMaxOfNDigit { |
清晰、简洁版本的java代码
1 | public class Print1ToMaxOfNDigit { |
总结
- 打印字符串镖师的数组,从第一个非零数字打印。
- 关注大数问题