牛客oj:未收錄牛客oj九度oj:
github**: 012-列印1到最大的n位數
csdn題解:劍指offer–012-列印1到最大的n位數
九度oj
csdn題解
github**
未收錄1515-列印1到最大的n位數
劍指offer–012-列印1到最大的n位數
012-列印1到最大的n位數
您也可以選擇回到目錄-劍指offer–題集目錄索引
題目描述
給定乙個數字n,列印從1到最大的n位數。輸入
每個輸入檔案僅包含一組測試樣例。樣例輸入 樣例輸出對於每個測試案例,輸入乙個數字n(1<=n<=5)。
輸出
對應每個測試案例,依次列印從1到最大的n位數。
12 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不用列印出來而已。也就是說,我們把數字的每一位都從0到9排列一遍,就得到了所有的十進位制數。
#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 思路 本題考查大數越界,需要轉為字串儲存...