一、使用字符串实现
public static void main(String[] args) {
StringBuffer number = new StringBuffer("001");
while (!numberIncr(number)) {
printNumber(number);
}
}
private static boolean numberIncr(StringBuffer number) {
int nLength = number.length();
boolean isFlowOver = false;
int takeOver = 0;
for (int i = nLength -1; i >=0 ; i--) {
int iSum = number.charAt(i) - '0' + takeOver;
///takeOver = 0;
if (i == nLength -1) {
// 个位 + 1
iSum++;
}
if (iSum >= 10){
if (i == 0) {
// 最高位溢出
isFlowOver = true;
} else {
takeOver = 1;
iSum -=10;
number.setCharAt(i, (char) ('0' + iSum));
}
}else {
number.setCharAt(i, (char) ('0' + iSum));
break;
}
}
return isFlowOver;
}
private static void printNumber(StringBuffer number){
///读到的最高位不为0的数
boolean trans = false;
for (int i = 0; i < number.length(); i++) {
if (!trans && number.charAt(i) != '0'){
trans = true;
}
if (trans) {
///读到过最高位不为0数,下面就直接一直读
System.out.print(number.charAt(i));
}
}
System.out.println();
}
二、使用字符数组实现
public static void main(String[] args) {
int n = 5;
char[] number = new char[n];
for (int i = 0; i < number.length; i++) {
number[i] = '0';
}
while (!charArrayIncr(number)) {
printNumber(number);
}
}
private static boolean charArrayIncr(char[] number) {
// 是否发生进位
int takeOver = 0;
// 是否溢出
boolean isFlowOver = false;
// 数字长度
int nLen = number.length;
for (int i = nLen - 1; i >= 0; i--) {
// 处理一次进位
int cur = number[i] - '0' + takeOver;
//某位
if (i == nLen - 1) {
// 个位+1
cur++;
}
if (cur >= 10) {
if (i == 0) {
isFlowOver = true;
} else {
// 非最高位,且发生进位
takeOver = 1;
number[i] = '0';
}
} else {
// 未发生进位
number[i] = (char) (cur + '0');
break;
}
}
return isFlowOver;
}
private static void printNumber(char[] number) {
boolean transFlag = false;
for (int i = 0; i < number.length; i++) {
if (!transFlag && number[i] != '0') {
transFlag = true;
}
if (transFlag) {
System.out.print(number[i]);
}
}
System.out.println();
}



