剑指Offer面试题:9.打印1到最大的n位数

一题目:打印1到最大的n位数二不考虑大数解法三字符串模拟算法解法解决这个问题需要表达一个大数。最常用也是最容易的方法是用字符串或者数组表达大数。该算法的步骤如下:Step1.把字符串中的

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

一 题目:打印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] = '\0';
    int nLen = strlen(cNumber);

    while(!StructNumber(cNumber))
    {
        PrintCount_1(cNumber);
    }
    delete[] cNumber;
}

void main()
{
    PrintCount(3);
    return;
}

 剑指Offer面试题:9.打印1到最大的n位数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120166.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于cBridge2.0,你不能错过的关键信息(三)!

    关于cBridge2.0,你不能错过的关键信息(三)!上篇ELI5短文中我们讨论了cBridge2.0如何解决「自管」流动性模型中与状态守卫者网络(SGN)的协调问题。今天我们来继续讨论自管模型的最后一个话题:cBridge2.0的设计如何利用SGN为非托管桥接系统中的「作恶问题」提供有史以来第一个解决方案。那么什么是「作恶」呢?首先我们要知道,在cBridge2.0自管桥接模型中,对于桥接节点和用户来说,跨链交易的发生总是需要两个步骤,其顺序如下: 用户的第1步:向源链上的桥接节点进行「时间锁定」的转账,发起转账的用户…

    2022年5月4日
  • idea21.1 激活码生成【在线注册码/序列号/破解码】

    idea21.1 激活码生成【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
  • jedispool释放连接_redis项目实例

    jedispool释放连接_redis项目实例1.下载redis,地址:https://download.csdn.net/download/rexueqingchun/103247192.设置redis密码,修改redis.windows.conf配置文件,去掉requirepassfoobared前面的注释  (注:foobared为默认密码,可以自定义密码,例如:123456)3.在redis目录中新建startup.bat,添加re…

    2022年9月5日
  • 怎样设计接口?

    怎样设计接口?

    2021年12月7日
  • javascript字符串包含单双引号_js的字符串方法

    javascript字符串包含单双引号_js的字符串方法您可以使用include()方法,indexOf()或正则表达式来检查JavaScript字符串是否包含字符或短语。include()是检查字符串是否包含一个字母或一系列字母的最常用方法,并且是专门为此目的而设计的。在任何编程语言中,检查字符串是否包含子字符串都是常见的任务。例如,假设您正在构建在线游戏。您可能需要检查用户名是否包含禁止使用的短语,以确保所有用户名都适合您的游戏。JavaScript字符串包含有三种方法可检查JavaScript字符串是否包含另一个字符或字符序列:in

    2022年10月7日
  • macbook如何安装双系统_双系统安装方法

    macbook如何安装双系统_双系统安装方法1.官网https://www.microsoft.com/zh-cn/software-download/windows10ISO进入官网下载win10(因为win10仅支持win10专业版不要下家庭中文版)语言:简体中文64位2.用迅雷下否则直接下载时间会很长Mac迅雷-轻体验,大改变(拖动迅雷至文件夹,即可安装,macOS10.15安装后请到应用程序找到图标,右键打开)点击迅雷的加号新建任务在浏览器复制之后自动弹出迅雷下载对话保存位置至桌面点击下载打开浏览器.

    2022年9月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号