剑指offer 面试题17:打印1到最大的n位数
题目
输入数字n,按顺序打印出从1到最大的n位十进制数。
比如:输入3,则输出 1、2、3 、、、一直到最大的3位数999
代码
#include <iostream>
#include <string>
using namespace std;
bool Increment(char* number) {// 自增函数
bool isoverflow = false;
int istakeon = 0;
int nlen = strlen(number);
for (int i = nlen - 1; i >= 0; i--) {//从低位开始
int up = number[i] - '0' + istakeon;
if (i == nlen - 1)
up++;
if (up >= 10) {
if (i == 0) {
isoverflow = true;//超出最高位
}
else {
istakeon = 1;//
up -= 10;
number[i] = '0' + up;
}
}
else {
number[i] = '0' + up;//增加
break;
}
}
return isoverflow;
}
void printnum(char* number) {
bool isbegin0 = true;
int nlen = strlen(number);
for (int i = 0; i < nlen; i++) {
if (isbegin0 && number[i] != '0') {
isbegin0 = false;
}
if (!isbegin0)
{
printf("%c ", number[i]);
}
}
printf("\t");
}
char** creatnum(int n)
{
char** p_number = NULL;
char* number = new char[n + 1];
p_number = &number;
memset(number, '0', n);
number[n] = '\0';
return p_number;
}
int main() {
int n = 0;
cin >> n;
char* number = *(creatnum(n));
cout << number << endl;
while (!Increment(number)) {
printnum(number);
}
delete number;
return 0;
}