剑指offer十四:打印1到最大的n位数
#include<iostream>
using namespace std;
//字符串表示大树
bool Increament(char* number)
{
bool isOverFlow = false;
int TakeOver = 0;
int length = strlen(number);
for (int i = length - 1; i >= 0; i--)
{
int sum = number[i] - '0' + TakeOver;
if (i == length - 1)
sum++;
if (sum >= 10)
{
if (i == 0)
isOverFlow = true;
else
{
sum -= 10;
TakeOver = 1;
number[i] = '0' + sum;
}
}
else
{
number[i] = '0' + sum;
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)
{
printf("%c", number[i]);
}
}
printf("\t");
}
void printToMaxDigits(int n)
{
if (n <= 0)
return;
char* number = new char[n + 1];
memset(number, '0', n);
number[n] = '\0';
while (!Increament(number))
{
PrintNumber(number);
}
}
int main()
{
int data;
cout << "pls input a number:" << endl;
cin >> data;
printToMaxDigits(data);
}