面試題17 列印從1到最大的n位數

2021-10-05 15:08:44 字數 3167 閱讀 6404

題目:輸入數字n,按順序列印出從1到最大的n位十進位制數

分析:由於n未知,可能是非常大的數,常規的資料型別可能裝不下,考慮用字串陣列來儲存數字,但需要考慮一下兩個問題:

字串陣列表示數字的相加演算法(通過模擬十進位制數的加法過程完成或其他方法);

規範得列印出數字。

**:

#include

//////題目:列印1到n位的最大數(考慮大數問題,用字串來表示數字)

///void

print1tonmaxrecursively

(int n)

;//字元竄表示的數字自增1,返回值表示是否溢位

bool

charnumberincrease

(char

*number,

int length)

;//列印字元竄表示的數字

void

printcharnumber

(char

*number,

int length)

;int

main()

void

print1tonmaxrecursively

(int n)

char

*number =

newchar

[n +1]

;for

(int i =

0; i < n; i++

) number[n]

='\0'

;while(!

charnumberincrease

(number, n))}

//字元竄表示的數字自增1

bool

charnumberincrease

(char

*number,

int length)

if(sum >=10)

else

}else

}return isoverflow;

}//列印字元竄表示的數字

void

printcharnumber

(char

*number,

int length)

if(isbeginprint)

}printf

(",");

}

除了通過模擬十進位制數的加法過程來完成以外,還可以通過全排列的思路完成:由於是列印出1到n位的最大數,那麼可以將改問題看成列印n位數的全排列,以下通過遞迴的方式編寫**:

void

print1tonmaxrecursively

(int n)

char

*number =

newchar

[n +1]

;for

(int i =

0; i < n; i++

) number[n]

='\0'

;for

(int i =

0; i <

10; i++

)delete

number;

}//全排列列印的核心函式

void

print1tonmaxrecursivecore

(char

*number,

int length,

int index)

for(

int i =

0; i <

10; i++

)}

///

///題目:兩個大數相加(只考慮正數),輸入:三行,第一行輸入相加兩數的最大位數n,後兩行分別輸入乙個大數

///#include

#include

using

namespace std;

//兩個字串表示的大數相加

char

*addbignumber

(char

*num1,

char

*num2,

int maxlength)

;//列印字元竄表示的數字

void

printcharnumber

(char

*number,

int length)

;int

main()

return0;

}//兩個字串表示的大數相加

char

*addbignumber

(char

*num1,

char

*num2,

int maxlength)

int index1 =

0, index2 =0;

for(

; num1[index1]

!='\0'

; index1++)}

for(

; num2[index2]

!='\0'

; index2++)}

index1--

; index2--

;int max = index1 > index2 ? index1 : index2;

if(maxlength < max)

//預留一位,防止溢位

char

*sum =

newchar

[maxlength +2]

; sum[maxlength +1]

='\n'

;int takeover =0;

for(

int i = maxlength; i >=

0; i--)if

(index2 >=0)

int temp = n1 + n2 + takeover;

if(temp >=10)

else

index1--

; index2--;}

return sum;

}//列印字元竄表示的數字

void

printcharnumber

(char

*number,

int length)

if(isbeginprint)

} cout << endl;

}

面試題17 列印從1到最大到n位數

次題其實考察的是大數問題,但是我目前是用python3進行程式設計,在python中沒有數字的限制,所以會出現直接迴圈的效率比用大數的方法要快,但是這裡還是建議大家先思考大數方法 其實就是輸入n就定義乙個n長度的陣列,每乙個位置代表真實數字對應的位置,然後分辨從0 9迴圈通過字串進行轉換,防止超出傳...

面試題17 列印從1到最大的n位數

輸入數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999。2.1 跳進面試官陷阱 分析 這道題目看起來很簡單。我們看到這個問題之後,最容易想到的辦法就是先求出最大的n位數,然後用乙個迴圈從1開始逐個列印。於是寫出以下 void printtomaxo...

面試題17 列印從1到最大的n位數

我自己的實現,常規思路 include include using namespace std bool increment str char num str,int str len else if num str i 9 num str i 0 else return true void my p...