核心:
1. +1程序:注意大整数
2. 打印:去除前面的0
bool Increment(string str) {
int len = str.size();
int nSum = 0;
//int isOverflow = 0;
int nTakeOver = 0;
for (int i = len-1; i >= 0; i--) {
nSum = str[i] - '0' + nTakeOver;
if (i == len - 1)nSum++;
if (nSum >= 10) {
if (i == 0) {
return false;
}
else {
nSum -= 10;
nTakeOver = 1;
str[i] = nSum + '0';
}
}
else {
str[i] = str[i] = nSum + '0';
break;
}
}
return true;
}
bool Print(string str) {
bool isBeginned0 = true;
int len = str.size();
for (int i = 0; i < len; i++) {
if (isBeginned0 && str[i] != '0') {
isBeginned0 = false;
}
if (!isBeginned0) {
cout << str[i];
}
}
}
void PrintToMaxOfDigits(int n) {
string str ;
for (int i = 0; i < n; i++)str[i] = '0';
while (!Increment(str)) {
Print(str);
}
}
全排列的做法
void PrintToMaxOfDigits2(int n) {
if (n <= 0)return ;
string str;
for (int i = 0; i < n; i++)str[i] = '0';
for (int i = 0; i < 10; i++) {
str[0] = i + '0';
PrintToMaxofDigits2Recursively(str, n, 0);
}
}
void PrintToMaxofDigits2Recursively(string str, int len, int index) {
if (index == len - 1) {
Print(str);
return;
}
for (int i = 0; i < 10; i++) {
str[i + 1] = '0' + i;
PrintToMaxofDigits2Recursively(str, len, index + 1);
}
}