【面试题】剑指offer 12

输入n,打印1到最大的n位数

//#include<iostream>
//#include<cstdlib>
//using namespace std;
void Print1ToMaxOfNDigits(int n)
{
	int num=1;
	int i=0;
	while (i++<n)
	num*=10;
	for(i=1;i<num;i++)
	{
		printf("%d\t",i);
	}
}
//bool Increment(char* num)
//{
//	bool isOverflow=false;
//	int TakeOver=0;
//	int Length=strlen(num);
//	for(int i=Length-1;i>=0;i--)
//	{
//		int sum=num[i]-'0'+TakeOver;
//		if(i==Length-1)
//		   sum++;
//		if(sum>=10)
//		{
//			if(i==0)
//				isOverflow=true;
//			else
//			{
//				sum-=10;
//				TakeOver=1;
//				num[i]='0'+sum;
//
//			}
//		}
//		else
//		{
//			num[i]='0'+sum;
//			break;
//		}
//	}
//	return isOverflow;
//}
//void printNum(char* num)
//{
//	bool isBegining0=true;
//	int Length=strlen(num);
//	for(int i=0;i<Length;i++)
//	{
//		if(isBegining0&&num[i]!='0')
//			isBegining0=false;
//		if(!isBegining0)
//			printf("%c",num[i]);
//	}
//	printf("\t");
//}
//void Print1ToMaxOfNDigits(int n)
//{
//	if(n<=0)
//		return;
//	char* num=new char[n+1];
//	memset(num,'0',n);
//	num[n]='\0';
//	while (!Increment(num))
//	{
//		printNum(num);
//	}
//	delete[] num;
//}
//int main()
//{
//	Print1ToMaxOfNDigits(10);
//	system("pause");
//	return 0;
//}
//#include<iostream>
//#include<cstdlib>
//#include<cassert>
//using namespace std;
//bool Increment(char* num)
//{
//	bool isOverFlow=false;
//	int TakeOver=0;
//	int Length=strlen(num);
//	for (int i=Length-1;i>=0;i--)
//	{
//		int Sum=num[i]-'0'+TakeOver;
//		if (i==Length-1)
//		{
//			Sum++;
//		}
//		if(Sum>=10)
//		{
//			if(i==0)
//			isOverFlow=true;
//			else
//					{
//						Sum-=10;
//						TakeOver=1;
//						num[i]='0'+Sum;
//					}
//		}
//		else
//		{
//			num[i]='0'+Sum;
//			break;
//		}
//		
//	}
//	return isOverFlow;
//}
//void printNum(char* num)
//{
//	bool isBegin0=true;
//	int Length=strlen(num);
//	for(int i=0;i<Length;++i)
//	{
//		if(isBegin0&&num[i]!='0')
//		{
//			isBegin0=false;
//		}
//		if(!isBegin0)
//		{
//			cout<<num[i];
//		}
//	}
//	cout<<"\t";
//}
//
//void Print1ToMaxOfNDigits(int n)
//{
//	if(n<=0)
//		return;
//	char* num=new char[n+1];
//	memset(num,'0',n);
//	num[n]='\0';
//	while (!Increment(num))//Increment是将字符串表示的num+1
//	{
//		printNum(num);//打印num
//	}
//	delete[] num;
//}
//int main()
//{
//	Print1ToMaxOfNDigits(5);
//	system("pause");
//	return 0;
//}
#include<iostream>
#include<cstdlib>
#include<cassert>
using namespace std;
void printNum(char* num)
{
	bool isBegin0=true;
	int Length=strlen(num);
	for(int i=0;i<Length;++i)
	{
		if(isBegin0&&num[i]!='0')
		{
			isBegin0=false;
		}
		if(!isBegin0)
		{
			cout<<num[i];
		}
	}
	cout<<"\t";
}

void Print1ToMaxOfNDigitsRecursively(char* num,int length,int index)
{
	if(index==length-1)
	{
		printNum(num);
		return;
	}
	for(int i=0 ;i<10;i++)
	{
		num[index+i]=i+'0';
		Print1ToMaxOfNDigitsRecursively(num,length,index+1);
	}
}
void Print1ToMaxOfNDigits(int n)
{
	if(n<=0)
		return;
	char* num=new char[n+1];
	num[n]='\0';
	for (int i=0;i<10;++i)
	{
		num[0]=i+'0';
		Print1ToMaxOfNDigitsRecursively(num,n,0);
	}
	delete[] num;
}

int main()
{
	Print1ToMaxOfNDigits(2);
	system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值