匿名用户
1级
2018-11-07 回答
#include
#include
#include
void add(char* p, int i) //参数:p为数组,i为正在检测的位
{
if(p[i]=='0') //当该位为0, 则变为1, 退出add函数
{
p[i]='1';
return;
}
else if(p[i]=='1') //如果该位为1,则变为0, 再检测前一位, 如果前一位还为1, 则检测再前一位
{ //直到前一位为0,才退出add函数
p[i]='0';
add(p,--i);
}
}
int main()
{
char* p=NULL;
int n;
while(1) //循环输入不同的位数
{
printf("\n\nplease input:");
fflush(stdin); //清空输入缓冲
scanf("%d",&n);
if(n<1) //输入小于1时退出程序
{
break;
}
if(p!=NULL) //如果p数组存在,则释放它, 重新构建数组
{
free(p);
}
p=(char*)malloc(sizeof(char)*(n+1)); // 重新构建数组
memset(p,'0',n); //每位先设置为0
p[n]='\0';
printf("\n%s",p); //输出全0情况
int i=n-1; //末尾位
while(1)
{
int flag=1;
int j;
for(j=0;j
{
if(p[j]=='0')
{
flag=0;
break;
}
}
if(flag==1)
{
break;
}
else //如果不是每一位全为1,则在最后位上加1(调用add函数)
{
add(p,n-1);
printf("\n%s",p);
}
}
}
return 0;
}