码迷,mamicode.com
首页 > 其他好文 > 详细

打印从1到最大的n位数

时间:2015-08-05 21:52:25      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:

//和剑指offer程序基本一致,不过print和进位两部分合并在一个程序中
//如果把其分拆,进行适当的整理,代码会更加整洁
void PrintToMaxOfDigitsN(int n)
{
    if (n <= 0) return;

    int i = 0;
    bool sign = false; //判断是否进一位
    char *num = new char[n + 1], *num_out;

    //字符串初始化
    for ( i = 0; i < n; i++)
    {
        num[i] = 0;
    }
    num[n] = \0;

    while (true)
    {
        sign = false;

        if (9 != num[n - 1])
        {
            num[n - 1] += 1;
        }
        else
        {
            for (i = n - 2; i >= 0; i--)
            {
                if (9 == num[i])
                {
                    if (0!=i)
                    {
                        num[i] = 0;
                    }
                    else
                    {
                        delete[] num;
                        return; //已经输出至最大值
                    }
                }
                else
                {
                    num[i + 1] = 0;
                    num[i] += 1;
                    break; //+1操作完成,跳出循环
                }
            }
        }

        num_out = num;
        while (0 == *num_out)
        {
            ++num_out;
        }
        cout << num_out << endl;
    }
}

针对此题,还有使用全排列,调用递归实现。

另外,此题不适用char存储的话,可以使用四个bit存储一个十进制数。

最后,针对大数的加减乘除,使用字符串操作实在是虐心,可以使用string实现。

具体可参考:

http://bbs.csdn.net/topics/390499949中赵四老师的相关代码。

打印从1到最大的n位数

标签:

原文地址:http://www.cnblogs.com/jason1990/p/4705804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!