题目:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
思路:字符串解决大数问题
代码:
package offer.q17;
import java.util.Arrays;
//考虑大数问题
public class A2 {
static boolean invalidInput = false;
public static void printNumbers(int n) {
if (n <= 0) {
invalidInput = true;
return ;
}
char[] resChs = new char[n ];
Arrays.fill(resChs,‘0‘);
String res = String.valueOf(resChs);
System.out.println(res);
char[] tarChs = new char[n];
Arrays.fill(tarChs,‘9‘);
String target = String.valueOf(tarChs);
int i=n-1,j= n-1; //i记录数字的最高位
//字符串做加法
while(res.compareTo(target)!=0) {
boolean carryBit = false; // 是否产生进位
while (res.charAt(j) == ‘9‘) {
j--;
carryBit =true;
}
char temp = (char) (res.charAt(j) + 1);
if(!carryBit){
if(j==n-1){
res = res.substring(0,j)+temp;
} else if(j==0){
res = temp+res.substring(j+1,n);
} else {
res = res.substring(0,j)+temp+res.substring(j+1,n);
}
} else{
char[] tempChs = new char[n-j-1]; //j后面的全部‘9‘变为全部‘0‘
Arrays.fill(tempChs,‘0‘);
String tempStr = String.valueOf(tempChs);
res = res.substring(0,j)+temp+tempStr;
if(j<i){
i=j;
}
j = n-1;
}
System.out.println(res.substring(i,n));
}
}
public static void main(String[] args) {
printNumbers(3);
}
}
原文:https://www.cnblogs.com/nickyBlog/p/15269254.html