題目: 輸入數字n, 按順序列印出從1最大的n位十進制數。比如輸入3,則列印出1,2,3一直到最大的3位數999.
1、這是一個典型的大數加法問題,當面試官不允許使用BigInteger實作大數加法的時候,通常是使用字元串或者數組實作其功能。
2、在大數的加法中,我們需要注意的問題是對變量number不斷遞增+1,實作列印,但我們需要知道什麼時候停止number+1,即到了最大的n位數。這裡需要一個小技巧,我們隻需判斷最高位(第n位)是否要進位,如果需進位,則已經為最大數。
3、需要注意列印數組中的數字時,補位的0不應該列印。
public boolean Increment(int[] number){ // 這個方法是用來實作對數加1操作
boolean isOverflow = false;
int nTakeOver=0;
for(int i=number.length-1;i>=0;i--){
int nSum = number[i]+nTakeOver;
if(i==number.length-1)
nSum++;
if(nSum>=10){
if(i==0)
isOverflow=true;
else{
nTakeOver=1;
nSum=nSum-10;
number[i]=nSum;
}
}
else{
number[i]=nSum;
break;
}
}
return isOverflow;
}
public void PrintNumber(int[] number){ //該方法是負責列印一個正類,千萬不要嘗試将數組變成一個整數
boolean isBeginning=true;
for(int i=0;i<number.length;i++){
if(isBeginning&&number[i]!=0)
isBeginning=false;
if(!isBeginning){
System.out.print(number[i]);
}
}
}
public void Test(int n){ //列印從1到最大的n位整數
if(n<=0)
System.out.println("輸入出錯,請重新輸入!");
int[] number = new int[n];
while(!Increment(number)){
PrintNumber(number);
//System.out.println();
}
}