剑指offer十四:打印1到最大的n位数

剑指offer十四:打印1到最大的n位数_第1张图片

 剑指offer十四:打印1到最大的n位数_第2张图片

 剑指offer十四:打印1到最大的n位数_第3张图片

剑指offer十四:打印1到最大的n位数_第4张图片 

 剑指offer十四:打印1到最大的n位数_第5张图片

 剑指offer十四:打印1到最大的n位数_第6张图片

 剑指offer十四:打印1到最大的n位数_第7张图片

 剑指offer十四:打印1到最大的n位数_第8张图片

#include
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);
}

 剑指offer十四:打印1到最大的n位数_第9张图片

你可能感兴趣的:(剑指offer)