剑指offer面试题17---打印1到n的最大的n位数

这道题对我来说有些难,需要有时间再看看整理下

#include <iostream>
#include <string.h>
using namespace std;


bool Increment(char* number)
{
	bool isOverflow = false;
	int nTakeOver = 0;
	int nLength = strlen(number);


	for (int i = nLength - 1; i >= 0; i--)
	{
		int nSum = number[i] - '0' + nTakeOver;
		if (i == nLength - 1)
			nSum++;


		if (nSum == 10)
		{
			if (i == 0)
				isOverflow = true;
			else
			{
				nSum = 0;
				nTakeOver = 1;
				number[i] = '0';
			}
		}
		else
		{
			number[i] = '0' + nSum;
			break;
		}
	}
	return isOverflow;
}


void PrintNumber(char* number)
{
	int nLength = strlen(number);
	int NotZero_location = 0;


	for (int i = 0; i < nLength; ++i)
	{
		if (number[i] != '0')
		{
			NotZero_location = i;
			break;
		}
	}


	for (int i = NotZero_location; i<nLength; ++i)
	{
		cout << number[i];
	}


	cout << '\t';   //制表符,间隙比空格大,可使数据更整齐
}
int main()
{
	int n;
	cin >> n;
	if (n <= 0)
		return -1;


	char *number = new char[n + 1];
	memset(number, '0', n);
	number[n] = '\0';


	while (!Increment(number))
	{
		PrintNumber(number);
	}


	delete[]number;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_34793133/article/details/80820723
今日推荐