劍指Offer 012 列印1到最大的N位數

2021-07-11 03:42:06 字數 2925 閱讀 4994

牛客oj:未收錄

九度oj:

github**: 012-列印1到最大的n位數

csdn題解:劍指offer–012-列印1到最大的n位數

牛客oj

九度oj

csdn題解

github**

未收錄1515-列印1到最大的n位數

劍指offer–012-列印1到最大的n位數

012-列印1到最大的n位數

您也可以選擇回到目錄-劍指offer–題集目錄索引

題目描述

給定乙個數字n,列印從1到最大的n位數。

輸入

每個輸入檔案僅包含一組測試樣例。

對於每個測試案例,輸入乙個數字n(1<=n<=5)。

輸出

對應每個測試案例,依次列印從1到最大的n位數。

樣例輸入

樣例輸出

1

2 3

4 5

6 7 8 9

#include 

#include

using

namespace

std;

// 除錯開關

#define __tmain main

#ifdef __tmain

#define debug cout

#else

#define debug 0 && cout

#endif // __tmain

class solutin

return

0;}

好像沒有什麼問題,但是仔細分析你就會發現,n的範圍並不確定,我們沒法保證這些數是不是超出了int_max的表示範圍。

當n過大的時候,就會溢位,這時候我們的程式輸出的值是不確定或者說是被截斷的

我們的思路是:

* 初始就開闢乙個n+1大小的串,用來儲存數字

#include 

#include

using

namespace

std;

// 除錯開關

//#define debug

#define __tmain main

#ifdef debug

#define debug cout

#else

#define debug 0 && cout

#endif // debug

class solutin

void print( )

while(this->m_isoverflow != true)

}void printnumber( )

else

nsum++;

debug <<"nsum = "

= 10) // 需要進製

else}}

else

// 沒有進製, 則當前位增加1以後迴圈立即結束}}

private :

int m_n; // n位數

char *m_number; // 儲存資料的字串

bool m_isoverflow; // 是否溢位, 溢位時說明無需繼續輸出

volatile

int m_length; // 當前數字的位數

};int __tmain( )

return

0;}

上面的演算法已經很不錯了,但是**複雜,要在短時間內完成這樣思路清晰而縝密的**有點困難,因此我們需要更加簡潔的方法

如果我們在數字前面補上0的話,那麼我們發現,n位所有的十進位制數起始就是n個從0到9的全排列。

也就是說,我們把數字的每一位都從0到9排列一遍,就得到了所有的十進位制數。

只要我們在列印的時候,數字排在前面的0不用列印出來而已。

#include 

#include

using

namespace

std;

// 除錯開關

#define debug

#define __tmain main

#ifdef debug

#define debug cout

#else

#define debug 0 && cout

#endif // debug

class solutin

char *number = new

char[n + 1];

number[n] = '\0';

// 最地位迴圈0~9

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

delete number;

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

// 當前位迴圈0~9

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

}void printnumber(char *number)

}if(i != length) // 開始的0不應該輸出

return

0;}

劍指Offer12列印1到最大的n位數

題目 輸入乙個數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,列印出1,2,3,一直到最大的3位數即999.注意陷阱 n位數,可能是int型盛不下的數,所以需要用大數來模擬。有兩種方法,一種就是大數模擬,每次加1,然後輸出。還有一中就是利用全排列,把其想成n位數的全排列,每一位數是從0到9...

劍指offer 17 列印1到最大的n位數

這道題題目為輸入數字n,按順序列印出1最大的n位十進位制數。解題思路為 對於列印出1最大的n位十進位制數,可以採取在數字前面補0的方法,其實n位十進位制數就是n個從0到9的全排列。在列印的時候只需不列印數字前面的0即可。用遞迴實現 如下 include include include include...

劍指Offer系列17 列印從1到最大的n位數

輸入數字 n,按順序列印出從 1 到最大的 n 位十進位制數。比如輸入 3,則列印出 1 2 3 一直到最大的 3 位數 999。示例 1 輸入 n 1 輸出 1,2,3,4,5,6,7,8,9 說明 用返回乙個整數列表來代替列印 n 為正整數 python 思路 本題考查大數越界,需要轉為字串儲存...