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

2021-09-30 14:33:49 字數 868 閱讀 1848

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

陷阱:這個題目看似簡單,我們先求出最大的n位數,然後for迴圈從1開始列印。

void printtomax(int n)

乍看沒啥毛病,但如果仔細分析會發現面試官並沒有指定n的範圍。當n輸入很大的時候,最大的n位數用int或者long long會不會都要溢位?這也就是要考慮大數問題。陷阱,赤果果的陷阱。

民工解法:模擬字串加法,繞過陷阱。為了儲存n為數字我們需要乙個n+1長度的字串,且初始化為'0',末尾置為'\0'。主要完成兩個功能:模擬加法、列印數字。

#include #include #include bool increment(char *number)

} else

}return false;

}void printnumber(char *number)

printf("%s\t", number);

}

民工解法2:

遞迴,數字全排列  n位所有十進位制數字其實都是n個從0到9的全排列,也就是說把每一位從0到9排列一遍,就能得到所有十進位制數。

void print(char *number)   //輸出字串  

printf("%s ", number);

}void printrecur(char *number, int n, int index) //全排列的方式

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

}

擴充套件題大數加法等實現了在補充,現在卡在加負數上面。

劍指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 然後每一次為字串表...