如何编写代码实现将数字变成0的操作次数

本篇内容主要讲解“如何编写代码实现将数字变成0的操作次数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写代码实现将数字变成0的操作次数”吧!

成都创新互联网站建设公司,提供成都网站制作、网站建设、外贸网站建设,网页设计,建网站,PHP网站建设等专业做网站服务;可快速的进行网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,是专业的做网站团队,希望更多企业前来合作!

问题描述

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

为了方便理解题意,下面给出两个示例:

示例 1:

输入:num = 14

输出:6

解释:

步骤 1) 14 是偶数,除以 2 得到 7 。

步骤 2) 7 是奇数,减 1 得到 6 。

步骤 3) 6 是偶数,除以 2 得到 3 。

步骤 4) 3 是奇数,减 1 得到 2 。

步骤 5) 2 是偶数,除以 2 得到 1 。

步骤 6) 1 是奇数,减 1 得到 0 。

示例 2:

输入:num = 8

输出:4

解释:

步骤 1) 8 是偶数,除以 2 得到 4 。

步骤 2) 4 是偶数,除以 2 得到 2 。

步骤 3) 2 是偶数,除以 2 得到 1 。

步骤 4) 1 是奇数,减 1 得到 0 。

(来源:力扣)

解决方案

首先,由题意可知:题目要求给出一个非负整数num,返回将它变成零所需要的次数,并要求当数为偶数时,需要将其除以2,为奇数时,将其减去1。如此重复操作,直到将其变为0,最后返回操作的次数。

然后,我们再来找出里面的关键点:首先是num是一个非负整数,所以我们代码不需要对数的类型进行判断,其次是当这个数足够大的时候肯定会经过许多次减去1或者是除以2的操作,那么肯定会用到循环。我们再进一步思考,常用的循环主要有for循环和while循环,那么针对本道题目,选取哪一种循环更好呢?于是我们再进一步思考,for循环一般用于在知道循环次数的情况下,在目标循环次数内进行操作,而while循环一般用于不知道循环次数情况下,在条件范围内循环,满足条件后直接退出循环。可见,对比两种循环后,针对本道题目,选择while循环更合适。

最后,在确定循环后,不要着急写代码,题目中还有要求,当该数变成偶数时,需要除以2,为奇数时,需要减去1。所以,在while循环中,我们还需要加入判断语句。这样才能在题目要求范围内完成题目。

也许大家现在有一个疑问,for循环是在知道循环次数的情况下进行操作,进而很容易统计循环次数,但while循环是满足条件就跳出循环,要怎样统计循环次数呢?这个问题其实很简单,我们只需要在循环外定义一个初始值为0的变量,然后每循环一次就加1,这样在循环完成后,循环次数也就统计出来啦!

下面请看题解代码:

def math():

    num = int(input(''))

    a = 0

    while num != 0:

        if num % 2 == 0:

            num = num / 2

            a = a + 1

        elif num % 2 != 0:

            num = num - 1

            a = a + 1

    return a

print(math())

测试结果:

如何编写代码实现将数字变成0的操作次数

如何编写代码实现将数字变成0的操作次数

如何编写代码实现将数字变成0的操作次数

上述代码适合于大多数朋友的思路,本人也在其他地方找到了其他的思路,现在将代码分享给大家共勉:

class Solution:

def numberOfSteps (self, num: int) -> int:

          return bin(num).count('1') + num.bit_length() - 1

如何编写代码实现将数字变成0的操作次数

到此,相信大家对“如何编写代码实现将数字变成0的操作次数”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

分享题目:如何编写代码实现将数字变成0的操作次数
转载注明:https://www.cdcxhl.com/article34/jscgpe.html

成都网站建设公司_创新互联,为您提供标签优化服务器托管建站公司手机网站建设Google做网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设