zoukankan      html  css  js  c++  java
  • 打印1到最大的n位数

    题目

    输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。考虑大数问题

    大数加法,乘法详解:https://www.cnblogs.com/tianzeng/p/9020822.html

    解法

    用字符串或者数组表达大数

    1. 把字符串中的每一个数字都初始化为'0';
    2. 每一次为字符串表示的数字加1,再打印出来;
    #include <iostream>
    #include <vector> 
    using namespace std;
    
    class Solution
    {
        public:
            void to_print_max_num(int n);
            bool increment(vector<char> &s);
            void print(vector<char> &s);    
    };
    void Solution::to_print_max_num(int n)
    {
        if(n<=0)
            return;
        vector<char> s(n,'0');
        s[n]='';
        while(!increment(s))
            print(s);
        return;
    }
    bool Solution::increment(vector<char> &s)
    {
        bool is_over_flow=false;
        int n_take_over=0;
        int len=s.size();
        
        for(int i=s.size()-1;i>=0;--i)
        {
            int sum=s[i]-'0'+n_take_over;
            if(i==len-1)
                ++sum;
                    
            if(sum>=10)
            {
                if(i==0)
                    is_over_flow=true;
                else
                {
                    sum-=10;
                    n_take_over=1;
                    s[i]='0'+sum;
                }
            }
            else
            {
                s[i]='0'+sum;
                break;
            }
        }
        return is_over_flow;
    }
    void Solution::print(vector<char> &s)
    {
        bool is_begin=true;
        for(int i=0;i<s.size();++i)
        {
            if(is_begin&&s[i]!='0')
                is_begin=false;
            if(!is_begin)
                cout<<s[i];
        }
        cout<<endl;
    } 
    int main()
    {
        int n;
        cin>>n;
        Solution s;
        s.to_print_max_num(n);
        return 0;
    }

    递归解法

    #include <iostream>
    #include <vector> 
    using namespace std;
    
    class Solution
    {
        public:
            void to_print_max_num(int n);
            void increment_rec(vector<char> &s,int len,int index);
            void print(vector<char> s);    
    };
    void Solution::to_print_max_num(int n)
    {
        if(n<=0)
            return;
        vector<char> s(n,'0');
        s[n]='';
        
        for(int i=0;i<10;++i)
        {
            s[0]=i+'0';
            increment_rec(s,n,0);
        }
    }
    void Solution::increment_rec(vector<char> &s,int len,int index)
    {
        if(index==len-1)
        {
            print(s);
            return;
        }
        for(int j=0;j<10;++j)
        {
            s[index+1]=j+'0';
            increment_rec(s,len,index+1);
        }
    }
    void Solution::print(vector<char> s)
    {
        bool is_begin=true;
        for(int i=0;i<s.size();++i)
        {
            if(is_begin&&s[i]!='0')
                is_begin=false;
            if(!is_begin)
                cout<<s[i];
        }
        cout<<endl;
    }
    int main()
    {
        int n;
        cin>>n;
        Solution s;
        s.to_print_max_num(n);
        return 0;
        return 0;
    }

     拓展

    • 用char型存储10进制数字的每一位,8bit的char型字符能表示256个字符,而十进制只有0-9的10个数字,用char表示十进制数字并没有充分利用内存,怎样才能更高效的利用内存。?
  • 相关阅读:
    C# 将数据导出到Excel汇总
    jquery 常用技巧
    JavaScript:世界上误解最深的语言
    对于jQuery中$.ajax方法的新认识
    JQuery上传插件Uploadify使用详解
    HTTP中Get与Post的区别
    Javascript中最常用的55个经典技巧
    C# params参数的应用
    10种JavaScript特效实例让你的网站更吸引人
    jQuery设计思想
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10146541.html
Copyright © 2011-2022 走看看