列印從1到最大的n位數

2021-08-27 05:23:44 字數 1125 閱讀 7451

void print1tomaxofndigits(int n)

上面的**有個最嚴重的問題—-沒有關注n的範圍

當輸入的n很大時,我們求最大的n位數用int或者long long都會溢位。也就是我們需要考慮大數問題。

因為數字最大是n位,所以我們需要用乙個長度是n+1的字串(字串最後一位放'\0')。當實際的數字不夠n位的時候,在字串前面補0。

我們把字串中的每乙個數字都初始化為'\0',然後每一次我字串表示的數字+1,在列印出來。

因此我們只需要做兩件事:

在字串表達的數字上模擬加法

把字串表達的數字列印出來

void print1tomaxofndigits(int n)

bool increment(char *number)

}else

}return isoverflow;

}void printnumber(char *number)

printf("\t");

}

上述**雖然思路簡單,但是由於模擬了整數的加法,所以**長。

方法3:

如果我們在數字前面補0,就會發現n位所有十進位制數其實就是n個從0到9數字的全排列。也就是說,我們把數字的每一位都從0到9遍歷一遍,就得到了所有的十進位制數。只是在列印的時候,排在前面的0不列印出來罷了。

全排列用遞迴表達,數字的每一位都可能是0~9中的乙個數,然後設定下一位。遞迴結束的條件是我們設定了的數字的最後一位。

void print1tomaxofndigits(int n)

deletenumber;

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

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

}//列印數

void printnumber(char *number)

printf("\t");

}

列印從1到最大的n位數

題目 輸入數字n,順序列印從1到最大n位的十進位制數,例如輸入3,列印1到999 includebool increment char number void printnumber char number void printtomaxofndigitsrecursively char numbe...

列印從1到最大的n位數

題目 輸入數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999。思路 首先注意這是個大數問題,n很大的時候c 的int和long long都吃不消,所以數字的儲存要用字串 這裡我模擬了大數相加,只不過每次都是加1 另外要注意列印的問題,cout比較慢...

列印從1到最大的n位數

第十七題,題目如下 思路如下 首先就是讓你輸入乙個數字確定位數。可能數字很大所以用字元型表示,即用0 9這10個字元表示大數字。那麼陣列長度就確定為n 1了 多的那個存 0 每次對陣列增加一,直到其第一位產生進製結束輸出。完整 如下 include include bool increment ch...