打印从1到最大的n位数

//和剑指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中赵四老师的相关代码。

posted @ 2015-08-05 20:47  从此寂静无声  阅读(314)  评论(0编辑  收藏  举报