例如,輸入3,打印1到999。
思路:創建一個n大小的字符數組,並賦值爲‘0’,每次從最後一位加一,根據最後一位的進位調整前面的數字;如此循環直到打印出n個9的數組(999..99)。
public boolean increment(char[] num) {
int flag = 0;// 表示進位
int len = num.length;
int tail = num[len - 1]-'0'; //取出最後一位;
tail += 1;
if (tail < 10) {//最後一位加1後沒有進位,直接改變原數組到最後一位,無需判斷前面的進位;
num[len - 1] = (char) (tail+'0');
} else {//最後一位有進位
if (len == 1) //只有一位,而且已經加到10,說明結束鏈,直接退出。
return false;
num[len - 1] = '0'; // 當最後一位加到10,將其設置爲0並使進位爲1;
flag = 1;
for (int i = len - 2; i >= 0; i--) { //從倒數第二位開始往前判斷是否需要進位;
int temp = num[i] - '0' + flag; // 取出第i個數;
if (temp < 10) { //小於10,說明不會產生進位,前面的數不會產生變化,直接結束判斷。
num[i] = (char) (temp+'0');
break;
} else {
if (i == 0) //第一位到10時,說明已經打印出了n位數到999..99,算法結束。
return false;
num[i] = '0';
flag = 1;
}
}
}
return true;
}
public static void printBigNum(char[] num) {
int k=0;
for(int i=0;i<num.length;i++) {
if(num[i]!='0') {
k=i;
break;
}
}
//從非‘0’位開始打印;
for(int i=k;i<num.length;i++) {
System.out.print(num[i]);
}
System.out.println();
}