void print1toN(int n){
if(n <= 0) return;
char *number = new char[n+1];
memset(number,'0',n);
number[n + 1] = '\0';
while(!increment(number)){
print(number);
}
delete [] number;
}
bool increment(char *number){
bool isoverflow = false;
int ntakeover = 0;
int len = strlen(number);
for(int i = len - 1;i >= 0;--i){
int sum = number[i] - '0' + ntakeover;
if(i == len - 1) ++sum;
if(sum >= 10){
if(i == 0) isoverflow = true;
else{
sum -= 10;
ntakeover = 1;
number[i] = '0' + sum;
}
}
else{
number[i] = '0' + sum;
break;
}
}
return isoverflow;
}
void print(char *number){
bool isbeg = true;
int len = strlen(number);
for(int i = 0;i < len;++i){
if(isbeg && number[i] != '0')
isbeg = false;
if(!isbeg)
printf("%c",number[i]);
}
printf("\t");
}
《剑指offer》17:打印1-最大n位数
最新推荐文章于 2020-10-28 21:59:05 发布