天天看點

12. 列印1到最大的n位數(C++版本)

遞歸版本:

void PrintData(char* pData, int size)
{
	// 從第一個不為'0'的位置開始輸出
	for (int idx = 0; idx < size; ++idx)
	{
		if (pData[idx] == '0') continue;
		std::cout << (pData + idx) << std::endl;
		return;
	}
}

           
void Print1ToMax(char* pData, int size, int curIdx)
{
	if (curIdx == size) // 指派完畢
	{
		PrintData(pData, size);
		return;
	}
	
	// 為curIdx位指派,然後遞歸為curIdx + 1位指派
	for (int curData = 0; curData <= 9; ++curData)
	{
		pData[curIdx] = curData + '0'; 
		Print1ToMax(pData, size, curIdx + 1);
	}
}
           
void Print1ToMax(int bitCount)
{
	if (bitCount < 1) return;	
	
	char* pData = new char[bitCount + 1];
	memset(pData, '0', bitCount);
	pData[bitCount] = '\0'; // 尾部加上'\0',便于直接列印輸出
	Print1ToMax(pData, bitCount, 0);	
}