如果有不对的地方请发邮件到995232184@qq.com。若是不太明白思路或者过程也可发邮件给我,谢谢支持。
/**
* 题目:打印1到最大的n位数
* 描述:输入数字n按顺序打印出1的最大的n位十进制数。
* 此题肯定不能用传统的方法,因为当n很大的时候,long long 都会溢出
* 所以我们采用字符串,递归递归递归
* @author lenovo047
*
*/
public class test12 {
public static void solve(int n) {
if(n <= 0)
return;
StringBuffer s = new StringBuffer(n);
for(int i = 0; i < n; i++) { //s目前全是0
s.append('0');
}
for(int i = 0; i < 10; i++) { //分别设置好了第0位,然后调用函数再逐个去补全后边的
s.setCharAt(0, (char)(i+'0')); //转型
solve(s, n, 0);
}
}
private static void solve(StringBuffer s, int n, int index) {
if (index == n - 1) { //s的所有位都定义完之后才能输出
printNumber(s); //打印时去掉前边多余的0,不能是033333,应是33333
return;
}
for (int i = 0; i < 10; i++) {
s.setCharAt(index + 1, (char) ('0' + i)); //设置后index的后边一位
solve(s, n, index + 1); //接着调用
}
}
private static void printNumber(StringBuffer s) {
boolean isBeginning0 = true;
for (int i = 0; i < s.length(); i++) { //逐位打印
// 当找到第一个非0字符以后,把isBeginning0设置为false,后面的字符全部打印 ;不打印前边的0
if (isBeginning0 && s.charAt(i) != '0') {
isBeginning0 = false;
}
if (!isBeginning0)
System.out.print(s.charAt(i)); //每一行是逐个打印
}
System.out.println();
}
}