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);	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值