//题目:输出 1到n。焦点在于如果n很大,超过32位或者64位,这基本上无法表示
//解决的办法是用字符串模拟加法,但是如何模拟,如何控制循环呢?
//memset(char* number,int ch,int n);作用将number前n个位置用ascII码代替memset(a,0,sizeof(a))
//用memset给每一个位赋值为ASCII'0'
//strlen(s)不包括'\0'
//increase true 表示正常自增 false表示溢出停止自增
bool increase(char *number)
{
int flag=0;//进位标识位
int length=strlen(number);
for(int i=length-1;i>=0;i--)
{
int sum;
if (i==length-1) {
sum=number[i]-'0'+flag+1;
}
else
{sum=number[i]-'0'+flag;}
if (sum>=10) {
if (i==0) {
return false;
}
flag=1;
sum=sum-10;
number[i]=sum+'0';
}
else
{
number[i]=sum+'0';
break;
}
}
return true;
}
void printfnozero(char *number)
{
int flag=0;//标识前面是否有非0,0是没有 1是有
int length=strlen(number);
for (int i=0; i<length; i++) {
if (number[i]=='0' && flag==0) {
continue;
}
else
{
printf("%c",number[i]);
flag=1;
}
}
printf(" ");
}
void printoneton(int n)
{
char *number=new char[n+1];
memset(number, '0', n);//前n置0 最后一项置'\0'
number[n]='\0';
while (increase(number)) {
printfnozero(number);
}
}