题目:输入数字n,按顺序打印出从1到最大的n位十进制数。
eg:输入3,输出1 2 3 一直到999。
**思路:**n有可能是一个很大的数,要考虑到大数问题。用数组或字符串表达大数。用字符串表示数字的时候,最直观的方法就是字符串里每一个字符都是‘0’到‘9’之间的某一个字符,用来表示数字中的一位。因为数字最大是n位,因此需要一个n+1位的字符串。当实际长度不够n位时,在前面补0。
#include<iostream>
#include<string.h>
using namespace std;
bool add(char *num)
{
if (num == NULL)
return false;
bool OverFlow = false; //判断是否到最大的n位数
int nTakeOver = 0;//表示进位
int len = strlen(num);
for (int i = len - 1; i >= 0; i--)
{
int sum = num[i] - '0' + nTakeOver;
if (i == len - 1)
{
sum++;
}
if (sum >= 10)
{
if (i == 0)
OverFlow = true;
else
{
sum -= 10;
nTakeOver = 1;
num[i] = '0' + sum;
}
}
else
{
num[i] = '0' + sum;
break;
}
}
return OverFlow;
}
void PrintNum(char *num)
{
bool IsFirst0 = true; //表示是否为第一个0
int len = strlen(num);
for (int i = 0; i < len; i++)
{
if (IsFirst0 && num[i] != '0')
IsFirst0 = false;
if (!IsFirst0)
cout << num[i];
}
cout << " ";
}
void Print(int n)
{
if (n <= 0)
return ;
char *num = new char[n + 1];
memset(num, '0', n); //数组初始化为0
num[n] = '\0'; //最后一个位置为‘\0’
//计算一个就输出一个
while (!add(num))
{
PrintNum(num);
}
delete[] num;
}
int main()
{
int n = 4;
Print(n);
getchar();
return 0;
}