17.打印從1到最大的n位數
題目描述
輸入數字n,按順序打印出從1到最大的n位十進制數。比如輸入3,則打印出1,2,3一直到最大的3位數999.
思路分析
考查大數的表示與計算.
代碼
代碼將分爲3個模塊。增長數字。打印數字。
/*
* 面試題17. 打印從1到最大的n位數
*/
#include <iostream>
#include <vector>
using namespace std;
bool increment(vector<char>& vc) {
/*
* 每次加1 並返回終止條件判斷結果
*/
int sum = 0;
int n_take_over = 0;
bool is_overflow = false;
for (int i = vc.size() - 1; i >= 0; i--) {
sum = (vc[i] - '0') + n_take_over;
if (i == vc.size() - 1) sum++;
if (sum >= 10) {
if (i == 0) {
is_overflow = true;
}
else {
sum -= 10;
n_take_over = 1;
vc[i] = '0' + sum;
}
}
else {
vc[i] = '0' + sum;
break;
}
}
return is_overflow;
}
void print_num(vector<char>& vc) {
int idx = 0;
while (idx < vc.size()) {
if (vc[idx] != '0') {
while (idx < vc.size()) {
cout<<vc[idx++];
}
cout<<endl;
return;
}
idx++;
}
}
void print_to_max(int n) {
if (n < 0) return;
vector<char> vc(n,'0');
while(!increment(vc)) {
print_num(vc);
}
return;
}
int main() {
int n = 2;
print_to_max(n);
return 0;
}
Reference
1.[劍指OFFER 第二版]