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 = true;
number[i] = '0' + nSum;
}
}
else {
number[i] = '0' + nSum;
break;
}
}
return isOverflow;
}
void PrintNumber(char* nnumber) {
bool isBegining0 = true;
int nLength = strlen(nnumber);
for (int i = 0;i < nLength;i++) {
if (isBegining0 && nnumber[i] != '0') {
isBegining0 = false;
}
if (!isBegining0) {
printf("%c", nnumber[i]);
}
}
printf("\t");
}
void PrintToMaxNDigits(int n) {
if (n <= 0) {
return;
}
char * number = new char[n + 1];
memset(number, '0', n);
number[n] = '\0';
while (!Increment(number)) {
PrintNumber(number);
}
delete[] number;
}
测试:
int main()
{
int n = 8;
PrintToMaxNDigits(n);
system("pause");
return 0;
}
结果: