遞歸版本:
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);
}