写一个函数判断一个数是否是2的乘方
来源:互联网 发布:sql count 求和 编辑:程序博客网 时间:2024/05/17 00:52
我的一个朋友在面试程序员的时候经常会问这样的一个问题。显然很多人会感到奇怪,会是这样一个简单的问题,当然,我想谈的不是这些。
当他告诉我这个问题的时候,我马上就想着怎么来看待这个问题,如果你是开发者的话,你看到这个标题的时候可能就已经想到答案了。
想了几分钟后,我觉得如果用位运算来解决这个问题的话,会让面试官对你的感觉很好的。接下来我会做一些有意思的实验来验证验证为什么我感觉位运算比较好。
我想到的第一个方法是:
在此用了迭代的方法来解决了这个问题。我学的第一门语言是JAVA,然后才是C,可能你会觉得我意在“迭代方法”,所以,每当我遇到一个新的问题,我都会尝试着先用迭代来解决。你也会认为我是在用最自然的方式来解决一个问题。
我想到的第二个方法是:
问题又一次得到解决,但这次用到的是递归。在学JAVA和C之前,我学了很多种其他语言,递归是比较常见而且流行的,而且它使代码看
起来更加简洁。
接下来的方法不是基于代码的
最近,我开始研究一些位运算,它常常让我们觉得是不值得这么麻烦来用位来解决这一的问题的,但是自从我看了一篇文章Bloom Filters
而且我还得到一本书““Programming Pearls””,我开始对位转移感兴趣。所以,每当我听说关于“2的乘方“或类似的问题的时候,我觉得
用位运算也可以解决。
以下是一些以二进制的形式表示的2的乘方的数:
当我减去一的时候,会得到以下的二进制数
然后,当我们拿一个2 的乘方的数字和这个数减去1 的数,都以二进制表示后进行与操作后,会发现一个有趣的现象,结果变成0.
而这些数值可能是2的乘方,以下是代码实现
这是一个非常好的方法来判断一个数是否是2的乘方。在过去,电脑资源不足,每个程序员会考虑到效率,比较喜欢这样,而现在,
已经很少人会在乎这点损失了。但是你不得不承认,这是这三种解决方法中最简洁的。
感谢:http://www.skorks.com/2010/10/write-a-function-to-determine-if-a-number-is-a-power-of-2/
- 写一个函数判断一个数是否是2的乘方
- 判断一个数是2的乘方
- 判断一个正整数是否是2的乘方
- 如何判断一个正整数是否是2的乘方
- 判断一个数是不是2的乘方
- 如何快速判断一个数是不是 2 的乘方?
- 判断一个数是否是2的阶次方数
- 写一个函数判断一个字符串是否是数字
- 判断一个整数是否是2的N次幂及一个数是否是偶数
- 判断一个数x是否是2的幂
- 判断一个数是否是2的N次幂
- 用php判断一个数是否是2的幂
- 判断一个数是否是2的整数次幂
- 判断一个数是否是2的次方
- 判断一个整数是否是2的幂数
- 判断一个数是否是2的n次方
- 判断一个数(x)是否是2的n次方
- 快速判断一个数是否是2的幂次方
- ubuntu软件管理大全
- zz Google Summer of Code 2011几个感兴趣的项目
- .NET设计规范(七) 使用规范
- Java是什么?
- 为你的团队提供学习的机会
- 写一个函数判断一个数是否是2的乘方
- java笔记——JDBC的工作原理
- 不是自己的事情不要问, 别人的事情不要管
- Spring自动装配模式五:autodetect的解析
- hibernate-memcached--在Hibernate中使用Memcached作为一个二级分布式缓存
- Spring自动装配模式二:byName的解析
- 有理想的程序员必须知道的15件事
- 算法导论第五章学习笔记
- Jquery表单验证插件–Validform:一行代码搞定整站的