列印從1到最大的n位數

2021-10-02 08:30:59 字數 1741 閱讀 2983

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

【例】

#include

#include

#include

using

namespace std;

void

printnumn

(int n)

for(i =

1; i < number; i++

)printf

("\n");

}int

main()

執行結果為:

缺陷:當輸入的n很大的時候,用int和long long型別都會溢位,即:不能表示大數。

解決辦法:用字串模擬數字加法

1、概念

用字串或者陣列表達大數。用字串表示數字的時候,最直觀的方法就是字串裡每乙個字元都是『0』到『9』之間的某乙個字元,用來表示數字中的一位。

2、基本思路

(1)因為數字最大是n位的,所以需要乙個長度為n+1的字串(字串中最後乙個是結束符『\0』)。

(2)把字串中每一位的數字都初始化為『0』,然後每一次為字串表示的數字加1,,再列印出來。

(3)因為初始化字串中每一位數字為0,所以當實際數字不夠n位的時候,在字串的前半部分補0。

3、解題步驟

(1)在字串表達的數字上模擬加法

注意:什麼時候字串停止加1?當加1時,第乙個字元產生進製,則表示已經是最大的n位數,這時停止加1。例如,99加1的時候,才會在第乙個字元(下標為0)的基礎上產生進製,這時停止加1。

(2)把字串表達的數字列印出來

注意:當數字不夠n位的時候在數字的前面補0,但是列印的時候這些補位的0不應該列印出來。例如,輸入2的時候,數字8用字串表示成「08」,應該列印出8,而不是「08」。所以,在碰到第乙個非0的字元之後才開始列印,直至字串的結尾。

4、解題程式

#include

#include

#include

using

namespace std;

bool

increment

(char

* number)

if(nsum >=10)

else

}else

}return overbool;

}void

printf

(char

* number)

if(inputbool)

//從第乙個非0的字元開始列印

}printf

("\t");

}void

printfnumn

(int n)

//因為字串以『\0』結尾,所以要分配n+1個空間,而不是n個

char

* number =

newchar

[n +1]

;memset

(number,

'0', n)

; number[n]

='\0'

;while

(increment

(number)

)//如果不越位,則列印

}int

main()

列印從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比較慢...