劍指offer:打印1到n位數到最大數

例如,輸入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();
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章