陷阱: 用最大的n位数-1(数字太大可能产生越界)
应该采用字符串模拟数字自加!
代码如下:
#include<iostream>
using namespace std;
int IsMax(char *number)
{
int nLength = strlen(number);
int CarryBit = 0;
bool ret = false;
for (int i = nLength-1; i >= 0; i--)
{
int nSum = number[i] - '0' + CarryBit;
if (i == nLength - 1)
++nSum;
if (nSum >= 10)
{
if (i == 0)
ret = true;
else
{
nSum -= 10;
CarryBit = 1;
number[i] = '0' + nSum;
}
}
else
{
number[i] = '0' + nSum;
break;
}
}
return ret;
}
void Print1ToN(int n)
{
if (n <= 0)
return;
char *number = new char[n+1];
memset(number, '0', n);
number[n] = '\0';
while (!IsMax(number))
{
cout << number << " " ;
}
}
int main()
{
Print1ToN(10);
getchar();
return 0;
}
输出部分可以做一些优化将 从第一个不为0的开始输出。