代码如下,我们在这里采用大数的运算,即用字符串模拟实现,如果是n位数,那么我们设置一个n+1位的字符串,最后一位为‘0’,首先将内部每一位都置为0,然后计算,如果我们得出最后一位++小于等于9,则结束这次循环,如果else,则把这个位数是第一位,需要进位,那么结束全部,已经到了最大的n位数了,否则,前一位加1,takeover表示进位,然后我们原本的那位就是减去10,注明,加减‘0’表示的是由整型变成字符串型,或者反过来。
#include <iostream>
#include <cstring>
using namespace std;
bool increment(char *number) {
int length = strlen(number);
bool is_overflow = false;
int takeover = 0;
for (int i = length - 1; i >= 0; --i) {
int num = number[i] - '0' + takeover;
if (i == length - 1)
++num;
if (num <= 9) {
number[i] = num + '0';
break;
}
else {
if (i == 0)
is_overflow = true;
else {
takeover = 1;
num -= 10;
number[i] = '0' + num;
}
}
}
return is_overflow;
}
void print_num(char *number) {
int length = strlen(number);
for (int i = 0; i < length; ++i) {
printf("%c", number[i]);
}
printf("\n");
}
int main() {
int n;
cin >> n;
char *number = new char[n + 1];
memset(number, '0', n);
number[n] = '\0';
while (!increment(number)) {
print_num(number);
}
delete number;
system("pause");
return 0;
}