您的位置:首页 > 其它

输出1到最大的n位数

2016-05-15 19:24 253 查看
题目:输入数字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
= '\0';  //最后一个位置为‘\0’
//计算一个就输出一个
while (!add(num))
{
PrintNum(num);
}
delete[] num;
}
int main()
{
int n = 4;
Print(n);
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: