列印1到最大的n位數

2021-07-14 07:48:25 字數 1116 閱讀 5659

題目:輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,則列印出1、2、3一直到最大的3位數即999。

詳細可參考《劍指offer》面試題12,p94。

本題重點是n的位數不確定,因而用一般的數字型別去儲存會溢位,需要考慮大數問題。解決大數問題一般採用字串或陣列來表示大數,這裡使用字串。

思路一:

字串每個數字都初始化為『0』,然後每一次讓字串表示的數字加1,再列印出來。

#include using namespace std;

// false: 代表整個n位數已達最大數

bool increasenumber(char *number)

else

}else // 該位數字在10以內,不需要進製

}return isoverflow;

}void printnumber(const char* number)

// 只有在isbegin0為false時才列印輸出

if(!isbegin0)

}printf("\t");

}void print1tomaxn(int n)

}int main()

思路二:

最大的n位數,即每一位都是0~9的排列,從最低位開始遞迴,讓每個位上從0置為9,然後列印輸出。

#include using namespace std;

void printnumber(const char *number)

if (!isbegin0)

}printf("\t");

}void print1tomaxnrecursively(char *number, int length, int index)

for (int i = 0; i < 10; ++i) }

void print1tomaxn(int n)

delete number; // 別忘了釋放記憶體

}int main()

雖然遞迴的方式**比較簡潔,感覺還是有點不好理解,自己走走**慢慢消化吧。

列印1到最大的n位數

輸入數字n,按順序列印出1到最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999。方法1 利用case語句使字元 char charplus char a if numchar len 0 判斷是否向高位移動,如果該為由9 0,則向高位移動 if flag numchar ...

列印1到最大的n位數

劍指offer用的是字串,還要苦逼的字串比較,看是否進製。直接用整型陣列來儲存。include include using namespace std 乙個int儲存幾位數 const int int num 2 每位數最大值,超過這個要進製 不包括最高位 const int int max 99 ...

列印1到最大的n位數

1.問題描述 輸入數字n,按順序列印出從1刀最大的n位數的十進位制數。比如輸入3,則列印出1,2,3一直到最大的3位數999.來自 劍指offer 2.分析 對於這個問題,我們需要考慮大數。因此我們在字串上模擬加法運算。3.ntakeover代表進製,isnotoverflow代表有沒有溢位 是不是...