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

2021-07-11 20:47:15 字數 1207 閱讀 2218

面試題12:

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

對於這道題進行時,咱們會進行一些分析,當你輸入3時,最大的三位數是999,這就是說這個最大的數是9*10^n-1+9 *10^n-2+。。。+9 *10^0。所以在這我想學習c語言的初學者都可以打出下面這個程式:

#define _crt_secure_no_warnings 1

#include

#include

void print_number(int n)

for (i = 1; i < number; i++)

}int main()

在這裡我們我們就可以知道你所列印的最大數其實就是你的10^n-1。上述方法看似解決了這個問題,但是,還是以前的問題,咱們應該考慮一些邊界因素和一些其他的因素,讓**做到最好。其實在這你就要想了,int的返回最大也就是2的32次方-1,所以,對於乙個很大的數,這個程式是無法顯示的。所以我們在這裡要考慮大數的問題,在這裡請你謹記,處理大數最容易也是最常用的方法就是字串或者陣列來表示。仔細想一想是不是這個道理呢,字串可以放下無比龐大的數。接下來的問題,就是如何用字串或者陣列來表示呢?這也是在面試時考察你的一點,我想你很容易就能想到對於數字0-9,我們就使用字元『0』-『9』來表示。在這個表示的過程中,我們要注意字串的nul結束位,所以對乙個含有n位的字串,我們需要乙個長度為n+1的字串。當實際數字不夠n位時,在字串前半部分補0;這樣我們先把字串每乙個數字初始化為『0』,然後每次給字元加1,再列印,這樣就可以了。

所以接下來我們可以寫出更好的一種方法:

#define _crt_secure_no_warnings 1

#include

#include

#include

int increment(char *num)

else

}else

break;

}for (i = 0; i'0';

return isoverflow;

}void print_n(int n)

free(num);

num = null;

}int main()

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

題目 輸入數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,則列印出1,2,3一直到最大的3位數999.1 這是乙個典型的大數加法問題,當面試官不允許使用biginteger實現大數加法的時候,通常是使用字串或者陣列實現其功能。2 在大數的加法中,我們需要注意的問題是對變數number不斷遞...

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

題目 輸入數字n,按順序列印出從1到最大的n為十進位制數。比如輸入3,則列印出1,2,3一直到最大的三位數即999。思路 這道題一看就是乙個大數問題。對於解決這個大數的問題,可以用到字串或者陣列都可以。字串解法 對於乙個字串的話,首先要考慮申請空間的時候,要申請n 1個因為最後還有乙個 0 進行加法...

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

輸入數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999。1到最大的n位十進位制數,其實就是n位數字的全排列 需要考慮long long不能存放的數字,只能用高精度的思想,也就是用陣列存放數字 符合正常的互動方式,也就是從第乙個非0的位置開始輸出 i...