输入数字n,按顺序打印从1到最大的n位十进制数。比如输入3,则打印1、2、3一直到最大的3位数999
class PrintMaxNumber {
public:
PrintMaxNumber(int i = 1) :n(i) {}
void Print1ToMaxOfN();
private:
/*判断是否达到了最大的n位数*/
bool Increment(char *number);
void PrintNumber(char *number);
private:
int n;
};
void PrintMaxNumber::Print1ToMaxOfN() {
if (n <= 0) return;
char *number = new char[n + 1];
memset(number, '0', n);
number[n] = '\0';
while (!Increment(number)) {
PrintNumber(number);
}
delete[]number;
}
bool PrintMaxNumber::Increment(char *number) {
bool isOverflow = false;
int nTakeOver = 0;
int nLength = strlen(number);
for (int i = nLength - 1; i >= 0; i--) {
/*取出第i位的数值*/
int nSum = number[i] - '0' + nTakeOver;
/*如果i是个位,则加一*/
if (i == nLength - 1)
nSum++;
/*如果nSum==10,说明第i位数字是9,加一后,需要进位操作*/
if (nSum == 10) {
/*i==0代表最高位*/
if (0 == i)
isOverflow = true;
else {
/*第i位置为0,进一*/
nSum -= 10;
nTakeOver = 1;
number[i] = '0' + nSum;
}
}
else {
number[i] = '0' + nSum;
break;
}
}
return isOverflow;
}
void PrintMaxNumber::PrintNumber(char *number) {
bool isBegin = true;
int nLength = strlen(number);
for (int i = 0; i < nLength; ++i) {
if (isBegin && number[i] != '0') isBegin = false;
if (!isBegin) cout << number[i];
}
cout << "\t";
}