问题描述:判断一个整数 n 是否为 2 的幂次方
一、2的幂次方的基本定义
什么样的数为2的幂次方?例如2^0=1,2^1=2,2^2=4……,符合公式2^n(n>=0)的数称为2的幂次方。
如何判断一个数是否为2的幂次方呢?基本思路:把一个数不断的除以2,得到商与余数,若余数等于1,则这个数必然不是;若余数大于1,则继续除以2,直到商等于1。若商等于1且余数为0,则这个数为2的幂次方。
二、2的幂次方的判断方法
1:把一个数不断的除以2,得到商与余数,若余数等于1,则这个数必然不是;若余数大于1,则继续除以2,直到商等于1。若商等于1且余数为0,则这个数为2的幂次方。代码如下: 1 /// <summary>
/// <summary>
/// 判断一个整数 n 是否为 2 的幂次方
/// </summary>
/// <param name="n">需要判断的整数n</param>
/// <returns>true:整数n是2的幂次方;false:整数n不是2的幂次方</returns>
static bool IsPower(int n)
{
while (true)
{
//0是2^0
if (n == ) return true; int quotient = n / ;//商
int remainder = n % ;//余数 //余数等于1,则这个数必然不是
if (remainder == ) return false; //商等于1且余数等于0,则这个数必然是
if (quotient == && remainder == ) return true; n = n / ;
}
}
2: 把一个数n拆成二进制看待处理的,如果 n 是 2 的幂次方的话,那么 n 的二进制数的最高位是 1,后面的都是 0。如果我们把它减 1,则会导致最高位变成 0,其余全部变成 1。然后我们把 n 和 (n - 1)进行与操作,结果就会是 0。例如:16=1 0000,(1 0000 & 0 1111)=0。代码如下:
/// <summary>
/// 判断一个整数 n 是否为 2 的幂次方
/// </summary>
/// <param name="n">需要判断的整数n</param>
/// <returns>true:整数n是2的幂次方;false:整数n不是2的幂次方</returns>
static bool IsPower(int n)
{
return (n & (n - )) ==;
}
三、总结
从运算性能上来说,首选n & (n - 1)的判断方式,一行代码即可解决2的幂次方的判断。
问题描述:判断一个整数 n 是否为 2 的幂次方的更多相关文章
- 学习练习 java练习小题题目:判断一个整数能被几个9整除
题目:判断一个整数能被几个9整除 package com.hanqi.lianxi; import java.io.*; public class Test1 { //判断能否被9整除 static ...
- 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...
- 博客志第一天——判断一个整数N是否是完全平方数?
关注博客园很久,今天是第一次写博客.先附上一个C题目:写一个函数判断一个整数是否为完全平方数,同时是否该数的各位数至少两个相同的数字 #include <stdio.h> #include ...
- JavaScript语言里判断一个整数是偶数还是奇数,并输出判断结果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript语言里判断一个整数,属于哪个范围:大于0;小于0;等于0
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 判断一个整数是否是2的n次方
参考:http://bbs.csdn.net/topics/370058619 如题,如何判断一个整数是否是2的N次方,我能想到的方法有两个 1.一直除2,看最后是否等于1.(最笨的方法) 2.转换成 ...
- 很火的Java题——判断一个整数是否是奇数
完成以下代码,判断一个整数是否是奇数: public boolean isOdd(int i) 看过<编程珠玑>的人都知道这道题的答案和其中极为简单的道理. 最普遍的风格,如下: 这个函数 ...
- leetcode9_C++判断一个整数是否是回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 输出: true 示例 2: 输入: - 输出: false 解释: 从左向右读, 为 - ...
- 判断一个整数是否是回文数C++实现 leetcode系列(九)
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
随机推荐
- java 二分法查找原理
二分法查找原理: 1.只要低位下标不大于高位下标,就进行二分查找(步骤1-3) 2.先在有序的数组中对半查找中间的坐标,如果中标和要查找的下标相等时,找到目标数,那二分结束. 3.如果步骤2没有找到, ...
- 查看python版本和django版本
python --version 在python shell中: import sys sys.version import django django.VERSION
- docker 创建实例
docker创建mysql实例要注意表名大小写和端口号映射的问题.下面是使用文件挂载解决表名大小写问题. docker run --name mysql-1 -e MYSQL_ROOT_PASSWOR ...
- mysql关系型数据库
参考:https://www.cnblogs.com/alex3714/articles/5950372.html 关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数 ...
- linux安装fasttext报错,升级gcc后成功解决
首先说一下存在问题: 本人打算在linux安装一个fasttext用来训练词向量,本来是想要从gensim来调用fasttext的,但是加载大的本地txt一直不对,没办法了只好在linux安装一个fa ...
- java中的URLEncoder和URLDecoder类;中文在地址栏中的处理
[IT168 技术文档] /* 网页中的表单使用POST方法提交时,数据内容的类型是 application/x-www-form-urlencoded,这种类型会: 1.字符"a" ...
- “淘宝技术这十年”
"少时淘气,大时淘宝" 时势造英雄 起因eBay 易趣 在资本方面对仗,阿里想趁此崛起新项目就要求能在短时间内做出一个 个人对个人的商品交易网站(C2C)2003年4月7日-5月1 ...
- hiho一下:Beautiful String
hiho一下:Beautiful String 记不清这是 hiho一下第几周的题目了,题目不难,不过对于练习编程,训练思维很有帮助.况且当时笔者处于学习算法的早期, 所以也希望刚接触算法的同学能多去 ...
- android framework 之JNI
Java Native Interface ( JN I)是Java本地接口,所谓的本地(native) —般是指C/C++ ( 以下统称C)语言.当使用Java进行程序设计时,一般主要有三种情况需要 ...
- 自动贩卖机VS无人门店:谁是真正的零售新风口?
原本在线上不断发力,让实体店几乎凋敝的电商,却忽然对线下兴趣大增.阿里疯狂入股.收购线下商超:京东要在全国范围内开设百万家便利店,仅在农村就将开设50万家--这一股浪潮,或将直接改变整个百货零售 ...