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...