C++ 算法中遇到的问题

最近在用C++练习编程算法,其中一个问题:打印从1到最大的n位数。用递归的数字排列方法做,本来已经能成功做出来了,我自己又添加了一些小改动,本以为也是可行的,结果却发现了一个问题,关于0、NULL与‘\0’的关系问题。

 

先将正确解题代码奉上。


```
#include <iostream>
using namespace std;

// length: n位数 
// number: n+1位的数组(字符串) 
// numberIndex: 高位的位数在number中的下标值
void print1ToMax(int length, char* number, int numberIndex) {
	// 已设置的数字位数已经到达length限制 则完成一个数字 打印
	// 例如 3位数 则可用number[0][1][2]
	
	if(numberIndex == length - 1) {
		cout << number << endl;
		return ;
	} 
	
	/* 
	// char* number = new char[length + 1];后创建的是NULL数组 NULL=='\0'不能用来判断
	if(number[numberIndex + 1] == '\0') {
		cout << number << endl;
		return ;
	} */
	
	// 低位的循环结束后返回高位的循环 高位i++后继续进入低位 再次开启循环
	for(int i = 0; i < 10; i++) {
		number[numberIndex + 1] = i + '0';
		print1ToMax(length, number, numberIndex + 1);
	}
	
}

int main()
{
	int length = 3;
	char* number = new char[length + 1];
	number[length] = '\0';
	
	// 最高位 在number[0]
	for(int i = 0; i < 10; i++) {
		number[0] = i + '0';
		print1ToMax(length, number, 0);
	}
	
	delete[] number;
	
   return 0;
}

```


不考虑大数

```
#include <iostream>
#include "math.h"

using namespace std;

int main()
{
	int n = 3;  // 10*10*10-1 = 999
	int limitNum = 0;
	int digitNum = 0;
	
	limitNum = 1;
	while(digitNum < n) {
		limitNum *= 10;
		digitNum++;
	}
	
	limitNum--;
	
	/*
	--n;  
	while(n >= 0){
		digitNum = 9 * pow(10,n);
		limitNum += digitNum;
		n--;
	}*/
	
	
	
	cout << limitNum << endl;
	
	int num = 1;
	while(num <= limitNum) {
		cout << num << endl;
		num++;
	}	
 
   return 0;
}
```

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值