python经典百题之求数字位数及逆序打印

2023-09-22 12:07:11

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字

程序分析

我们需要编写一个程序,能够接受不多于5位的正整数,然后分析其位数,并逆序打印出各位数字。可以利用取模和除法运算来实现逆序打印数字,同时通过不断除以10的方式确定位数。

方法1: 使用取模和除法

def reverse_print(num):
    print("逆序打印结果:", end=" ")
    while num > 0:
        digit = num % 10
        print(digit, end=" ")
        num //= 10

def main():
    num = int(input("请输入一个不多于5位的正整数: "))
    
    # 计算位数
    count = 0
    temp = num
    while temp > 0:
        temp //= 10
        count += 1

    print("该数是{}位数.".format(count))
    reverse_print(num)

if __name__ == "__main__":
    main()

解题思路:

  • 先通过循环除以10来计算数字的位数。
  • 然后用取模运算逆序打印数字。

优点:

  • 算法简单,实现直观。

缺点:

  • 需要两次遍历数字,一次计算位数,一次逆序打印。

方法2: 使用字符串

def reverse_print(num):
    num_str = str(num)
    print("逆序打印结果:", num_str[::-1])

def main():
    num = int(input("请输入一个不多于5位的正整数: "))
    
    # 计算位数
    count = len(str(num))

    print("该数是{}位数.".format(count))
    reverse_print(num)

if __name__ == "__main__":
    main()

解题思路:

  • 将数字转换成字符串,利用字符串的切片逆序打印数字。

优点:

  • 算法简单,逻辑清晰。

缺点:

  • 需要将数字转换成字符串,会引入一定的额外开销。

方法3: 递归实现逆序打印

def reverse_print(num):
    if num > 0:
        print(num % 10, end=" ")
        reverse_print(num // 10)

def main():
    num = int(input("请输入一个不多于5位的正整数: "))
    
    # 计算位数
    count = 0
    temp = num
    while temp > 0:
        temp //= 10
        count += 1

    print("该数是{}位数.".format(count))
    print("逆序打印结果:", end=" ")
    reverse_print(num)

if __name__ == "__main__":
    main()

解题思路:

  • 使用递归方式实现逆序打印数字。

优点:

  • 算法简洁,逻辑清晰。

缺点:

  • 递归调用可能导致栈溢出,特别是对于较大的数字。

方法总结及推荐

  • 推荐方法: 方法1和方法2是最直接的方法,简洁明了,逻辑清晰。方法1对于大数可能稍快一些,因为它不需要将数字转换成字符串。

  • 适用场景:

    • 对于这种题目,推荐使用方法1或方法2。它们实现简单,直观,适用于大多数情况。
    • 如果题目要求不能使用字符串,或者对性能要求较高,可以考虑使用方法1。
    • 方法3递归实现简洁,但可能在数字较大时导致栈溢出,不推荐在大数情况下使用。

综上所述,方法1(取模和除法)和方法2(使用字符串)是较好的选择,可以根据具体场景选择其中一种。方法3(递归)也可用,但由于可能导致栈溢出,不推荐在大数情况下使用。

更多推荐

模拟电子技术一|发展史

上世纪40年代:1946年宾夕法尼亚大学造出了第一台电子管的计算机缺点:体积大,功耗高,一个电子管的体积像灯泡一样大。上世纪50年代半导体材料替代了真空电子管,降低功耗,减少体积。一块半导体材料上:可以放很多个电子器件,不需要任何的连线和外接。集成电路的出现把成百上千个元器件放在一块芯片上,外面进行封装,体积没有变大。

实现安全的服务通信:探索如何使用服务网格来确保服务间的安全通信

🌷🍁博主猫头虎带您GotoNewWorld.✨🍁🦄博客首页——猫头虎的博客🎐🐳《面试题大全专栏》文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大

低代码技术推动能源行业数字化转型,服务商模式带来转型新商机

“新能源企业通过数字化转型不仅可以提高企业的运营效率和市场竞争力,还可以创新商业模式、提高能源生产效率和可持续性、优化资源配置并适应市场需求。选择百数的服务商模式,不仅可以解决我们想实现数字化转型的需求,还让我们多了一个开展新业务的机会,多了一个打开新能源行业市场的机会。”——跨境贸易商会会长、浙江浦江云晶科技有限公司

Netty(二)NIO-入门

Netty入门1.概述1.1NettyNetty是一个异步的,基于事件驱动的网络应用框架,用于快速开发可维护,高性能的网络服务器和客户端Cassandra,Spark,Hadoop,RocketMQ,ElasticSearch,gRPC,Dubbo,Spring5.x,Zookeeper都是基于netty开发。1.2N

npm常用命令系统介绍

npm常用命令系统介绍npmhelpnpminitpackage.json文件package.json文件属性说明默认package.json文件--参数[-yes|-y]设置package.json中字段的默认值package-lock.json文件npm[config|c]设置源npm[install|i]可选参数

【最新面试问题记录持续更新,java,kotlin,android,flutter】

最近找工作,复习了下java相关的知识。发现已经对很多概念模糊了。记录一下。部分是往年面试题重新整理,部分是自己面试遇到的问题。持续更新中~目录java相关1.面向对象设计原则2.面向对象的特征是什么3.重载和重写4.基本数据类型5.装箱和拆箱6.final有什么作用7.String是基本类型吗,可以被继承吗8.Str

vuepress+gitee免费搭建个人博客(无保留版)

文章目录最终效果,一睹为快!一、工具选型二、什么是VuePress三、准备工作3.1node安装3.2Git安装3.3Gitee账号注册四、搭建步骤4.1初始化VuePress4.2安装VuePress4.3初始化目录4.4编写文章五、部署到Gitee5.1创建仓库5.2个人空间地址设置4.3推送本地博客项目到Gite

linux如何查看各个文件夹大小

本文将介绍两种方法来查看Linux系统中文件夹的大小。方法一:使用du命令du命令是Linux系统中用于估算文件和目录容量的工具。通过du命令,可以查看文件夹的大小并按照目录层次结构进行排序。要查看文件夹的大小,可以按照以下语法使用du命令:du[选项][目录]其中,选项可以根据需要进行调整。一些常用的选项包括:-h:

使用JavaScript实现无限滚动的方法

前言在网页设计中,无限滚动是一种常见的交互方式,用户可持续地加载更多内容而无需刷新页面,提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果,使网页能够自动加载更多数据,减轻用户加载新页的负担,为用户提供更好的访问体验。原理理解无限滚动的原理无限滚动的原理是当用户滚动到页面底部时,自动加载更多内容。这

计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题,在CV领域,图片旋转验证码的角度计算模型被广泛应用于解决旋转图片矫正问题,有效解决机器识别图片验证码的问题。旋转图片验证码常用于验证用户身份,但由于图片可能被以不同角度旋转,识别难度比较大。本文提出了

HTML+CSS+JavaScript 大学生网页设计制作作业实例代码 200套静态响应式前端网页模板(全网最全,建议收藏)

目录1.介绍2.这样的响应式页面这里有200套不同风格的1.介绍资源链接📚web前端期末大作业(200套)集合Web前端期末大作业通常是一个综合性的项目,旨在检验学生在HTML、CSS和JavaScript等前端技术方面的能力和理解。以下是一些可能的Web前端期末大作业的示例和介绍:网页类型举例📘响应式网站开发:学

热文推荐