您的位置:首页 > 职场人生

海涛老师的面试题-作业12-打印从1到最大的n位数

2012-06-27 20:01 393 查看
View Code

// 打印从1到最大的n位数.cpp : 定义控制台应用程序的入口点。
//

/********************************************

题目:输入数字n,按顺序打印从1到最大的n位十进制数,
比如3,则打印1,2,3,一直到999;

********************************************/

#include "stdafx.h"
#include <string.h>
#include <iostream>
using namespace std;

void PrintNumber(char* Number)
{
bool isBegin=true;
int nLength=strlen(Number);
for(int i=0;i<nLength;i++)
{
if(isBegin&&Number[i]!='0')
isBegin=false;
if(!isBegin)
cout<<Number[i];
}
cout<<"\t";
}

bool Increment(char* Number)
{
bool IsOverflow=false;
int  nTakeOver=0;
int  nLength=strlen(Number);
for(int i=nLength-1;i>=0;i--)
{
int nSum=Number[i]-'0'+nTakeOver;
if(i==nLength-1)
nSum++;
if(nSum>=10)
{
if(i==0)
IsOverflow=true;
else
{
nSum-=10;
nTakeOver=1;
Number[i]=nSum+'0';
}
}
else
{
Number[i]='0'+nSum;
break;
}
}

return IsOverflow;
}

void Print1ToMaxOfDigits(int n)
{
if(n<0)
return;
char *Number=new char[n+1];
memset(Number,'0',n);
Number
='\0';
while(!Increment(Number))
PrintNumber(Number);
delete []Number;
}

void Print1ToMaxNDigitsRecur(char *Number,int Length,int index)
{
if(index==Length-1)
{
PrintNumber(Number);
return;
}
for(int i=0;i<10;++i)
{
Number[index+1]=i+'0';
Print1ToMaxNDigitsRecur(Number,Length,index+1);
}
}

void Print1ToMaxtOfNDigits(int n)
{
if(n<=0)
return;
char* Number=new char[n+1];
Number
='\0';
for(int i=0;i<10;i++)
{
Number[0]=i+'0';
Print1ToMaxNDigitsRecur(Number,n,0);
}
}

int _tmain(int argc, _TCHAR* argv[])
{
//Print1ToMaxOfDigits(5);
Print1ToMaxtOfNDigits(5);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: