zoukankan      html  css  js  c++  java
  • 剑指Offer面试题:9.打印1到最大的n位数

    一 题目:打印1到最大的n位数

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

    二 不考虑大数解法

    // 打印从1到最大的n位数
    void PrintNumbs(int n)
    {
        int nMax = 0;
        for (int i = 1;i <= n; i ++)
        {
            nMax = nMax*10 + 9;
        }
        for (int j = 1; j <= nMax; j ++)
        {
            cout << j << endl;
        }
    }

    三 字符串模拟算法解法

      解决这个问题需要表达一个大数。最常用也是最容易的方法是用字符串或者数组表达大数。该算法的步骤如下:

      Step1.把字符串中的每一个数字都初始化为'0';

      Step2.每一次为字符串表示的数字加1,再打印出来;

    #include "stdio.h"
    #include <iostream>
    using namespace std;
    
    bool StructNumber(char *pNumber)
    {
        int nLen = strlen(pNumber);
        bool bOver = false;
        for (int i = nLen - 1; i >= 0; i --)
        {
            int nSum = pNumber[i] - '0'+ 1;
    
            if (nSum >= 10)
            {
                if (0 == i)
                {
                    bOver = true;
                }
                else
                {
                    nSum -= 10;
                    pNumber[i]=nSum+'0';
                }
            }
            else
            {
                pNumber[i] = nSum+'0';
                break;
            }
        }
    
        return bOver;
    }
    
    void PrintCount_1(char *pNumber)
    {
        bool bIsBegin = true;
        int nLen = strlen(pNumber);
        for(int i =0;i < nLen; i ++)
        {
            if (bIsBegin && pNumber[i] != '0')
            {
                bIsBegin = false;
            }
            if (!bIsBegin)
            {
                cout << pNumber[i];
            }
        }
        cout << " ";
    }
    
    void PrintCount(int n)
    {
        char *cNumber = new char[n+1];
        memset(cNumber, '0', n);
        cNumber[n] = '';
        int nLen = strlen(cNumber);
    
        while(!StructNumber(cNumber))
        {
            PrintCount_1(cNumber);
        }
        delete[] cNumber;
    }
    
    void main()
    {
        PrintCount(3);
        return;
    }

     

  • 相关阅读:
    第15周Leetcode记录
    《Redis深度历险》七(info指令和过期淘汰策略)
    第14周leetcode记录
    《Redis深度历险》六(事务+发布订阅+Stream)
    第13周LeetCode记录
    在Load average 高的情况下如何鉴别系统瓶颈
    Apache TraceEnable关闭与测试方法
    PHP 5.6 如何使用 CURL 上传文件
    转载-浅谈Ddos攻击攻击与防御
    基于SWOOLE的分布式SOCKET消息服务器架构
  • 原文地址:https://www.cnblogs.com/xiaobingqianrui/p/8847268.html
Copyright © 2011-2022 走看看