列印從1到最大的n為數

2021-09-23 13:27:09 字數 1323 閱讀 5215

問題舉例:

當n為3時,則列印 1~999。

**實現:

void printtomaxofndigits_1(int n)

int main()

上述實現看似可以解決問題,但是如果數字超出了 int甚至超出了long long所能表達的範圍,這樣的話,問題就成了大數問題

大數情況下的**實現

void printnumber(char *number) //列印字串表示的數字

printf("\t");

}bool increment(char *number) //大數加 1

else //加 1後如果不小於10需要繼續向高位進製

關於上述**的分析:我們在做大數加法時,需要知道何時停止加 1,乙個簡單的辦法是讓大數(例如:100)與n位的最大數(例如:999)已經相等,則不必再加,但是每次加一都要使用strcmp() 例如:(「999」,number)來作比較,但是這樣做的話每次都是o(n),且比較n次。

第二種方法:我們知道當n等於3,數值達到999時,再進製就會越界,我們可以以此來作為評判。如果加後越界,則函式increment()返回true,對應就是已經越界。

如果覺得上述**難以理解,則可用下列方式來實現

列印的思路不變!新思路:將問題轉換為數字排列的問題;我們發現如果在數字的前面補0,就會發現 n位所有十進位制數其實就是 n個從 0到 9的全排列。也就是說,我們把數字的每一位都從 0到 9排列一遍,就得到了所有的十進位制數。

void printnumber(char *number) //列印字串表示的數字

printf("\t");

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

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

void printtomaxofndigits(int n)

delete number;

}int main()

**的過程如下:

而當n特別大時不適宜用遞迴,層次太深,可能會導致棧溢位

列印從1到最大的n位數

題目 輸入數字n,順序列印從1到最大n位的十進位制數,例如輸入3,列印1到999 includebool increment char number void printnumber char number void printtomaxofndigitsrecursively char numbe...

列印從1到最大的n位數

void print1tomaxofndigits int n 上面的 有個最嚴重的問題 沒有關注n的範圍 當輸入的n很大時,我們求最大的n位數用int或者long long都會溢位。也就是我們需要考慮大數問題。因為數字最大是n位,所以我們需要用乙個長度是n 1的字串 字串最後一位放 0 當實際的數...

列印從1到最大的n位數

題目 輸入數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999。思路 首先注意這是個大數問題,n很大的時候c 的int和long long都吃不消,所以數字的儲存要用字串 這裡我模擬了大數相加,只不過每次都是加1 另外要注意列印的問題,cout比較慢...