C语言判断是不是2的幂次方,C语言判断一个数是否是2的幂次方或4的幂次方
快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。
如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。
最快速的方法:
原因:因为2的N次方换算是二进制为10……0这样的形式(0除外)。与上自己-1的位数,这们得到结果为0。例如。8的二进制为1000;8-1=7,7的二进制为111。两者相与的结果为0。计算如下:
使用递归来实现的代码如下:
使用非递归来实现的代码如下:
扩展:求一个数n的二进制中1的个数。
非常巧妙地利用了一个性质,n=n&(n-1) 能移除掉n的二进制中最右边的1的性质,循环移除,直到将1全部移除,这种方法将问题的复杂度降低到只和1的个数有关系。代码如下:
扩展问题二:
A和B的二进制中有多少位不相同。这个问题可以分为两步,(1)将A和B异或得到C,即C=A^B,(2)计算C的二进制中有多少个1。
快速判断一个数是否是4的幂次方,若是,并判断出来是多少次方!
将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0; 因此问题可以转化为判断1后面是否跟了偶数个0就可以了。
4的整数次幂的二进制数都为 (4)100、(16)10000、(64)1000000......
另外,4的幂次方4^n也可以写为2^(2*n),即也可以写为2的幂次方,当然就满足2的幂次方的条件了,即num & num-1==0。
思路:首先用条件num & num-1==0来判断是否为2的幂次方,若不满足,则不是。若满足,在用条件num & 0x55555555来判断,若为真,则这个整数是4的幂次方,否则不是。
使用递归来实现的代码如下:
使用非递归来实现的代码如下:
C语言判断是不是2的幂次方,C语言判断一个数是否是2的幂次方或4的幂次方相关推荐
- 数值的整数次方-c语言快速幂
数值的整数次方-c语言快速幂 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn).不得使用库函数,同时不需要考虑大数问题. 示例 1: 输入:x = 2.00000, n = 10 ...
- C语言中判断一个三位数是否是水仙花数,判断三位数是否为水仙花数
用C语言写出判断一个三位数是否为水仙花数的程序 请给正确的答案,不懂的别进 1.一个主程序,输出所有的水仙花数程序,可参考如下: #include int main(int argc, char *a ...
- c语言编写程序x的y次方,C语言变为编程y = x-x立方/ 3! + x五次方力量/ 5! -x7th power / 7!...
这似乎不对,但是无论如何,我只是想补充一个问题,如果可以的话,您能再帮我一次吗? 您不能采用它,但不要说我的代码是错误的!结果留在那里,我自己看了一下. 它不是正整数(x)的序列,被写了n次,怎么可能 ...
- 判断数组相同数c语言_单片机常用的14个C语言算法,看过的都成了大神!
算法(Algorithm):计算机解题的基本思想方法和步骤. C语言入门视频教程_9天精通Linux C语言 - 创客学院www.makeru.com.cn 算法的描述:是对要解决一个问题或要完成一 ...
- 判断一个数2的n次幂的php,如何判断一个数是不是2的n次幂
题目:给定一个整数num,判断这个整数是否是2的N次方.比如,2,4,8是2的那次方,6,10不是2的N次方. 请看下面的程序: public static bool Check1(int num) ...
- C语言函数、指针应用程序设计——回文数判断and检验子串and仓库库存管理程序
最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...
- C语言学习之输入一个大于三的值判断是否为素数
C语言学习之输入一个大于三的值判断是否为素数 方法一 #include <stdio.h> int main(){int number,x; //定义变量printf("请输入一 ...
- C语言试题七十二之请编写函数判断三角形的类型,并输出其面积和类型。
1. 题目 编写函数:判断三角形的类型,并输出其面积和类型. 2.思路: 首先判断其两边之和是否大于第三边,若大于则判断可以构成三角形,再进一步判断该三角形是什么三角形,并计算这个三角形的面积:否则不 ...
- C语言试题六十九之请编写函数判断一个数是不是素数
1. 题目 编写函数:判断一个数是不是素数 素数:素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 2 .温馨提示 ...
- c语言字符串中取最大字符串,使用C语言提取子字符串及判断对称子字符串最大长度...
先来看一个使用C语言从字符串中提取子字符串的基本方法总结: #include /*处理中文字符*/ /*遍历字符串,非ASCII字符读取2个字节,ASCII读取一个字节,获取字符串长度*/ int S ...
最新文章
- 知乎热议20年科研怪状:为何论文创新性越强越难发表,跟风修修补补反而更容易发?...
- 使用PixelLib来实现图像分割
- iphone x屏幕尺寸_苹果公布 iPhone 12/12 Pro 屏幕更换价格,网友:碎不起!
- java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...
- 瞬间读懂什么是互联网思维、大数据、O2O、众筹、红海
- 解决PowerDesigner中Name与Code同步的问题
- 新手做UI?手里有几种常见的界面套路模板素材,你就成功一大半了!
- Docker安装实践Jenkins
- 电商3.0:构建互利共赢的生态圈
- Hyperledger Fabric教程(14)--动态添加组织的步骤
- 使用Bitmap font generator工具生成fnt文件
- 数字图像处理冈萨雷斯版学习(二)
- 一周技术学习笔记(第58期)-如何突破第四章障碍
- 最好用的PDF阅读器,登陆华为应用市场首页
- 从Bitly构建分布式系统中吸取的教训
- 矩阵小朋友,真是拿你没有办法
- 计算机毕业设计SSM电商直播订单管理系统【附源码数据库】
- 二进制“<”:“const _Ty”不定义该运算符或到预定义运算符可接收的类型的转换
- 网络购书挑战书业传统营销模式
- 全球与中国太阳镜片市场现状及未来发展趋势2022-2028
热门文章
- 沪深A股上市公司创新投资数据(2007-2018年)
- java 跨域重定向_跨域解决以及重定向
- [蓝桥杯][历届试题]蚂蚁感冒(模拟全过程)
- 从宏观到细节为你讲解前端性能优化
- JavaWeb的基础知识点
- 【BFS】天棋哥哥大战AlphaGo 校OJ2395
- python官网在哪里下载64bit_WinPython下载64bit
- RecycleView配合Adapter调用notifyDataSetChanged闪屏?
- web前端控制器拦截路径的url-pattern写 / 与 /* 的区别
- c语言编程3个数的立方和,用C语言编写:输出所有水仙花数.所谓水仙花数是指一个3位数.其各位数字立方和等于该数本身....