zoukankan      html  css  js  c++  java
  • 输出1到最大的N位数 【微软面试100题 第六十五题】

    题目要求:

      输入数字n,按顺序输出从1到最大的n位10进制数。

      例如,输入3,则输出1、2、3...、999(最大的3位数)。

      参考资料:剑指offer第12题。

    题目分析:

      如果我们在数字前面补0的话,就会发现n位所有十进制数其实就是n个从0到9的全排列。也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的十进制数。只是我们打印的时候,数字排在前面的0我们不打印出来而已。

    代码实现:

      

    #include <iostream>
    
    using namespace std;
    
    const int N = 4;
    void PrintToMaxOfNDigits(int n);
    
    int main(void)
    {
        cout << "打印1到最大的 " << N <<" 位数:" << endl;
        PrintToMaxOfNDigits(N);
        cout << endl;
        return 0;
    }
    void Print(char *num)
    {
        bool isBeginning = true;
        int len = strlen(num);
        for(int i = 0;i<len;i++)
        {
            if(isBeginning && num[i] != '0')
                isBeginning = false;
            if(!isBeginning)
                cout << num[i];
        }
        cout << " ";
    }
    void PrintCore(char *num,int len,int index)
    {
        if(index == len-1)
        {
            Print(num);
            return;
        }
        for(int i=0;i<10;i++)
        {
            num[index+1] = i+'0';
            PrintCore(num,len,index+1);
        }
    }
    void PrintToMaxOfNDigits(int n)
    {
        if(n <= 0)
            return;
        char *num = new char[n+1];
        num[n] = '';
        for(int i=0;i<10;i++)
        {
            num[0] = i+'0';
            PrintCore(num,n,0);
        }
    }
  • 相关阅读:
    java多线程小节, 总结的不错
    奇瑞风云, 你还在路上么
    android NDK 环境建立
    外企下岗白领正成为“新4050”
    搭积木
    祝MORIENTES在LIVERPOOL有所成就
    简单生活
    为什么要更新
    归去来
    随记一笔
  • 原文地址:https://www.cnblogs.com/tractorman/p/4104541.html
Copyright © 2011-2022 走看看