題目:
題目:輸入數字n,按順序打印出從1最大的n位十進制數。比如輸入3,則打印出1、2、3一直到最大的3位數即999。
代碼:
方法一——使用字符串模擬數字,解決大數問題:
string deletezero(string s) {
while (s[0] == '0') {
s = s.substr(1);
}
return s;
}
bool increase(string& s) {
int jinwei = 0;
int length = s.length();
for (int i = length - 1; i >= 0; i--) {
int num = s[i] - '0' + jinwei;
if (i == length - 1) {
num++;
}
if (num >= 10) {
if (i == 0)return false;
num -= 10;
jinwei = 1;
s[i] = '0' + num;
}
else {
s[i] = '0' + num;
break;
}
}
return true;
}
void PrintToMaxofDigit_1(int n) {
if (n <= 0)return;
string s = "";
for (int i = 0; i < n; i++) {
s.push_back('0');
}
while (increase(s)) {
cout << deletezero(s)<<endl;
}
}
方法二——把問題轉換成數字排列的解法,遞歸讓代碼更簡潔: