zoukankan      html  css  js  c++  java
  • 打印从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] = '';
    
        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中赵四老师的相关代码。

  • 相关阅读:
    bzoj 2599
    bzoj 3697
    poj 1741
    bzoj 2741
    bzoj 5495
    bzoj 3261
    网络流24题——骑士共存问题 luogu 3355
    网络流24题——数字梯形问题 luogu 4013
    bzoj 3998
    网络流24题——魔术球问题 luogu 2765
  • 原文地址:https://www.cnblogs.com/jason1990/p/4705804.html
Copyright © 2011-2022 走看看