题目描述:
输入数字n, 按顺序打印出从1到最大的n位十进制数。 比如输入3, 则打印出1、2、3一直到最大的3位数999。
#include <iostream>
#include <stdio.h>
bool Increment(char* number);
void PrintNumber(char* number);
void PrintToMaxOfDigits(int n)
{
if (n < 0)
return;
char *number = new char[n + 1];
memset(number, '0', n + 1);
number[n] = '\0';
while (!Increment(number))
{
PrintNumber(number);
}
delete[] number;
}
bool Increment(char* number)
{
bool isOverflow = false;
int takeover = 0;
int nSum = 0;
int length = strlen(number);
for (int i = length - 1; i >= 0; --i)
{
nSum = number[i] - '0' + takeover;
if (i == length - 1)
++nSum;
if (nSum >= 10)
{
if (i == 0)
{
isOverflow = true;
return isOverflow;
}
else
{
nSum = 0;
takeover = 1;
number[i] = '0' + nSum;
}
}
else
{
number[i] = nSum + '0';
break;
}
}
return isOverflow;
}
void PrintNumber(char* number)
{
bool isBegin0 = true;
int length = strlen(number);
for (int i = 0; i < length; ++i)
{
if (isBegin0 && number[i] != '0')
isBegin0 = false;
if (!isBegin0)
std::cout << number[i];
}
std::cout << '\t';
}
int main()
{
int n = 2;
PrintToMaxOfDigits(n);
}