输出1到最大的n位数

来源:互联网 发布:做动画片用什么软件 编辑:程序博客网 时间:2024/06/07 17:42

题目:输入数字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;}
0 0
原创粉丝点击