标签:style blog http color os strong io for
#include<iostream>
#include<cstring>
using namespace std;
bool Increment(char *str,int length)//字符串加1,如果为发生溢出,则返回true,否则返回返回false
{
if(str==NULL && length<1)//如果发生溢出,则返回false
{
return false;
}
int sum=str[length-1]-'0'+1;
if(sum<10)//如果不发生进位
{
str[length-1]+=1;
return true;
}
else
{
if(length-1==0)//如果溢出,则返回false
{
return false;
}
str[length-1]='0';//发生进位,把剩下的任务交给前length-1个字符
return Increment(str,length-1);//递归表达式
}
}
void print(char *str)//打印字符,打印时去掉前面的几个0
{
bool isBegin=false;//标识是否可以开始输出
int i;
for(i=0;i<strlen(str);i++)
{
if(!isBegin && str[i]!='0')//如果找到第一个非0字符,则标识可以开始输出了
{
isBegin=true;
}
if(isBegin)
{
cout<<str[i];
}
}
cout<<endl;
}
void ToMaxN(int n)//打印从1到最大的N位数
{
if(n>=1)
{
char *str=new char[n+1];
memset(str,'0',n);
str[n]='\0';
while(Increment(str,n))//如果能顺利增长
{
print(str);
}
delete []str;
}
}
int main()
{
int n;
while(cin>>n)
{
if(n>=1 && n<=5)
{
ToMaxN(n);
}
}
return 0;
}#include<iostream>
#include<cstring>
using namespace std;
bool Increment(char * str)//用于将当前字符串对应的数字加1,返回true表示增加成功
{
int len=strlen(str);
int current=str[len-1]-'0'+1;//将个位数字加1,current表示加1后的值
int i=len-1;//下面开始传播个位加1后的连锁进位反应
while(i>=0)//用i表示当前位
{
if(current<10)//若加1后不进位
{
str[i]=str[i]+1;
break;
}
else//如果当前位发生进位
{
if(i==0)//如果进位的是最高位,则直接发生溢出
{
return false;
}
else//如果进位的不是最高位,这里能保证i!=0,因为上面有个为0的分支处理
{
str[i]='0';//先将本位归零
i=i-1;//开始处理本位的上一位
current=str[i]-'0'+1;
}
}
}
return true;
}
void print(char *str)//显示该数字
{
bool begin=false;
int i;
int len=strlen(str);
for(i=0;i<len;i++)
{
if(!begin && str[i]!='0')
{
begin=true;
}
if(begin)//如果已经找到第一个非0的高位数字
{
cout<<str[i];
}
}
cout<<endl;
}
void ToMaxN(int n)//客户端调用的函数
{
char *str=new char[n+1];
memset(str,'0',n);//注意初值在中间,不是第三个参数
str[n]='\0';
while(Increment(str))
{
print(str);
}
delete []str;
}
int main()
{
int n;
while(cin>>n)
{
if(n>=1 && n<=5)
{
ToMaxN(n);
}
}
return 0;
}标签:style blog http color os strong io for
原文地址:http://blog.csdn.net/jxh_123/article/details/38364923