参考答案:
//只考虑a大于0的情形
//返回1,表示a为2的幂
//返回0, 表示a不是2的幂
int is2n(int a)
{
return (((~a + 1) & a) == a);
}
例如: 1.对于整数8,判断过程如下:
二进制 : 1000
~a : 0111
~a + 1 : 1000
(~a + 1)&a: 1000
显然有:(~ a + 1)&a == a;
2.对于整数7,判断过程如下:
二进制 : 0111
~a : 1000
~a + 1 : 1001
(~a + 1)&a: 0001
显然有:(~ a + 1)&a != a;
注:位运算,要熟练,很多地方都用到了,而且很巧妙~
如何判断一个数是2的幂,主要是要找出2的幂次方的数的特点。我们知道,1个数乘以2就是将该数左移1位,而2的0次幂为1, 所以2的n次幂(就是2的0次幂n次乘以2)就是将1左移n位, 这样我们知道如果一个数n是2的幂,则其只有首位为1,其后若干个0,必然有n & (n - 1)为0。(在求1个数的二进制表示中1的个数的时候说过,n&(n-1)去掉n的最后一个1)。因此,判断一个数n是否为2的幂,只需要判断n&(n-1)是否为0即可。
实现:
1: bool powerof2(unsigned int n)
2: {
3: return ((n & (n -1)) == 0);
4:
分享到:
相关推荐
C语言程序设计-判断整数x是否是同构数;若是同构数,函数返回1;否则返回0;x的值由主函数从键盘读入,要求不大于100;说明:所谓“同构数”是指这样的数,这个数出现在它的平方数的右边;例如:输入整数5,5的平方数是...
掌握VB中常用的Int、Rnd两个数学函数,学会生成某个区间随机数的方法,通过随机函数产生2个两位正整数,求这2个数之和并显示出来。
函数fun功能是:将a,b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c十位和千位上,b中的十位和个位数依次放在变量c个位和百位上。 例如,当a=45,b=12.调用该...
【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,...
本文实例讲述了Python编程判断一个正整数是否为素数的方法。分享给大家供大家参考,具体如下: import string import math #判断是否素数的函数 def isPrime(n): if(n<2 xss=removed>2): for d in range(2,int...
def lcm(a,b): for i in range(min(a,b),0,-1): if a%i==0 and b%i==0: ...c=int(input("请输入第一个数:")) d=int(input("请输入第二个数:")) print("这两个数的最小公倍数:") print(lcm(c,d))
编写求两个整数的最小公倍数的函数,函数原型为:int maxb(int x,inty);并编写主函数,调用该函数求键盘输入的两个整数的最小公倍数,并在屏幕输出。
8.3写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。 49 8.4写一函数,使给定的一个二维数组(3×3)转置,即行列互换。 49 8.5写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符...
要求一个正整数的位数,可以通过循环和除法运算来实现。以下是一个使用C语言的示例代码: #include int main() { unsigned int num; int count = 0; printf("请输入一个正整数:"); scanf("%u", &num); ...
【题目】将一个m位(m>1)的正整数n,依次去掉n中的某一位数字,得到m个整数,并将这m个整数按从小到大的次序排列后输出。 例如,对于整数387,依次去掉其中一位后,得到三个数:87、37、38,排序后为:37、38、87...
例如:编写多函数程序,判断某个给定的正整数是否为素数。 子函数个数: 1个 子函数原型:int isprime(unsigned int ); 子函数调用:...isprime(n) 子函数定义头部:int isprime(unsigned int x) 1. 编写多函数程序...
3、(基础题)编程实现:定义一个求n的阶乘的函数double fac(int n),在主函数输入一个正整数,然后调用fac函数输出这个数的阶乘值。主函数在前,fac函数在后面定义.提示:用递归方法求n!,n!可用递归关系来表示...
输入只有一行,给你一个函数式,式子中只含有字母,数字,‘+’、‘-’、‘*’、‘/’、‘(’、‘)’,表达式长度不超过 100,式子中的数均不为负且为0到2N-1间的int型整数,保证数据合法,输入的值以及结果都为0...
5、设计一个成员函数 int dayDiff(CTime t) ,用于计算当前对象与形参t之间的相隔的天数,注意相隔天数为大于等于0的正整数。注意闰年的问题。 6、设计一个成员函数 showTime(),用于显示日期,显示格式为:2020/...
求出两个非零正整数的最大公约数,并作为函数值返回(要求:数据的输入、输出在主函数中实现,例如:若给num1和num2分别输入49和21,则输出的最大公约数为7。
(1)一个C程序可以由多个模块构成,每个模块可由若干个小模块构成,继续分解,直到分解成不可分割的最小模块单元为止,最小模块单元即为一个函数。C程序由多个函数构成。每个函数可以单独放在一个文件中,也可以将...
C语言实验二——函数.
一个正整数,表示每袋核桃的数量。 例如: 用户输入: 2 4 5 程序输出: 20 再例如: 用户输入: 3 1 1 程序输出: 3 资源约定: 峰值内存消耗(含虚拟机) CPU...
2.编写函数computNum( int num),它的功能是计算任意输入的一个正整数的各位数字之和,结果由函数返回(例如:输入数据是123,返回值为6)。 3.编写函数,mulNum(int a,int b),它的功能是用来确定a和b是否是整数...
本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。 函数接口定义: int narcissistic( int number ); void PrintN( int m, int n ); 函数...