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 第二版]