[면접 문제] 검지 Offer-12 - 1부터 N까지 최대 숫자 인쇄

제목 개요


숫자 N을 입력하여 1부터 최대 N비트까지 10진수를 순서대로 인쇄합니다.
예를 들어 3을 입력하면 1-999 사이의 숫자를 인쇄한다

사고방식을 해결하다


직접 작은 함수를 써서 순환으로 가장 큰 N자리를 구하다
그런 다음 인쇄
주의: 입력한 N이 매우 크면 경계를 넘을 가능성이 높습니다!

개량하다


new N+1 문자열 배열
낮음에서 높음으로 순서대로 한 자리의 숫자를 바꾸다
차례차례 모든 위치를 판단하다
N의 숫자로 귀속되면 인쇄

코드 구현

#include
using namespace std;

// 
void PrintStrNum(char* str)
{
	bool IsBegin = true;
	size_t length = strlen(str);
	for (size_t i = 0; i < length; ++i)
	{
		// 0
		if (IsBegin && str[i] != '0')
			IsBegin = false;

		if (IsBegin == false)
			printf("%c", str[i]);
	}
	
	// Table 
	printf("\t");
}

// 
void _PrintDigits(char* num,const size_t length,const size_t index)
{
	// , 
	// 
	if (index == length - 1)
	{
		PrintStrNum(num);
		return;
	}

	// , 
	for (size_t i = 0; i < 10; ++i)
	{
		num[index + 1] = i + '0';
		_PrintDigits(num, length, index + 1);
	}
}

// 
void PrintDigits(const int length)
{
	if (length <= 0)
		return;

	char* num = new char[length + 1];
	num[length] = '\0';
	size_t index = 0;
	for (size_t i = 0; i < 10; ++i)
	{
		num[0] = i + '0';
		_PrintDigits(num, length, 0);
	}
	cout << endl;
}

void TestPrintDigits()
{
	cout << " :" << endl;
	PrintDigits(2);

	cout << " :" << endl;
	PrintDigits(3);

	cout << endl;
}

좋은 웹페이지 즐겨찾기