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

2021-06-23 05:52:59 字數 664 閱讀 1367

題目:

輸入乙個數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,列印出1,2,3,一直到最大的3位數即999.

注意陷阱:n位數,可能是int型盛不下的數,所以需要用大數來模擬。

有兩種方法,一種就是大數模擬,每次加1,然後輸出。

還有一中就是利用全排列,把其想成n位數的全排列,每一位數是從0到9的全排列。

方法1

void print1tolastdigist(int n)

increament(num)這個函式就是控制每次加1的,但是有乙個問題,就是咱們需要判斷是否到達了最大n位數,最先想到的就是逐個位置進行比較,但是這樣的時間複雜度就太高了,所以在increament()函式中進行了處理,就是只有當最高位得到進製的時候才返回乙個true,這樣就不需要列印了

bool increment(char *num)

}else

}return isoverflover;

}

然後是輸出函式,這裡需要說明的是如果高位是0的話,就不用輸出了,只從第乙個不是0的數開始往外輸出

方法2**:

void printnum(char *num)

for(;i<=nlength-1;i++)

cout<

劍指offer 面試題12 列印1到最大的n位數

題目 輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999.解法 這道提的陷進在於沒有規定最大的n位數的範圍,會不會溢位,也就是說我們要考慮大數問題。最常用也是最容易的方法是用字串或者陣列去表達大數。bool increment char nu...

劍指offer 面試題12 列印1到最大的n位數

題目描述 輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,列印1,2,3一直到最大的三位數999 題目分析 這個題不是簡單的用乙個for迴圈,當n很大的時候,就會超過數值的最大值介面,導致溢位。所以考慮使用字串表示整數。輸出n位數 public static void prin ig...

劍指offer面試題12 列印1到最大的n位數

輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,就列印出1 2 3 一起到最大的3位數,即999。這個題目看似簡單,但是當輸入的n很大時,求最大的n位數用整型或長整型都會溢位。這裡需要考慮大數問題。用字串或者陣列來表示大數,首先我們把字串中的每個數字都初始化為 0 然後每一次為字串表...