打印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表示十进制数字并没有充分利用内存,怎样才能更高效的利用内存。?
原文地址:https://www.cnblogs.com/tianzeng/p/10146541.html