17 wins the offer print face questions from 1 to the maximum number of bits n

Question: enter the number n, the maximum print from 1 to n-bit decimal order.

Enter: the n-

Output: Print Digital

Ideas:

Error-prone ideas: find the maximum n-bit decimal number, then the for loop print.

Cause: The maximum n-bit decimal number may exceed int type (or longlong type).

Large numbers expressed by using the array (or string).

Code:

#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-=10;
				nTakeOver=1;
				number[i]='0'+nSum;
			}
		}
		else
		{
			number[i]='0'+nSum;
			break;
		}
	}
	return isOverflow;
}
void PrintNumber(char* number)
{
	bool isBeginning0 = true;
	int nLength=strlen(number);
	for(int i=0;i<nLength;++i)
	{
		if(number[i]!='0'&&isBeginning0)
			isBeginning0 =false;
		if(!isBeginning0)
		{
			printf("%c",number[i]);
		}
	}
	printf("\t");
}
void Print1ToMaxOfNDigits(int n)
{
	if(n<=0)
		return;
	char *number=new char[n+1];
	memset(number,'0',n);
	number[n]='\0';
	while(!Increment(number))
	{
		PrintNumber(number);
	}
	delete[] number;
}
int main()
{
	int n=3;
	Print1ToMaxOfNDigits(n);
	return 0;
}

Complexity analysis:

Time complexity O (10 ^ n * n), space complexityO (n)

Published 58 original articles · won praise 10 · views 7523

Guess you like

Origin blog.csdn.net/qq_22148493/article/details/104463929