2 的 次 方

©著作权归作者所有:来自51CTO博客作者bitzhidu的原创作品,请联系作者获取转载授权,否则将追究法律责任

大家好我是好好学习天天编程的天天 一个整天在互联网上种菜和砍柴的程序员~

大量面试题中会考算法,当然其中也有一些小算法,是比较考察候选人思维的,所以出现的频次比较高。就比如下面这个: 题目描述:

判断一个数是否为2的N次方 判断一个数是否为2的幂次方

方法1

其实是一个题,知识不同的描述方式啦 那怎么求解呢? 很多人的思路就是直接做除2的操作么,但是这种思路,其实很难验证,除到什么时候算是结束呢?所以不合适。

那相反的思路,不断的算出2的幂次方的数来穷举,直到算出的等于或者超出这个数本身。如果是等于了,那就就是2的幂次方,如果是超过了,那就不是。

算法实现如下:


#include <stdio.h>

//使用judge函数判断num是否为2的幂次方
int judge(int num)
{
	int ret = 1;
	while (ret<=num)
	{
		//如果小于,则说明还没穷举完
		if (ret < num)
		{
			//每次产生一个2的幂次方数
			ret *= 2;
		}
		else
		{
			//是
			return 1;
		}
	}
	//不是
	return 0;
}
int main()
{
	int num = 0;
	scanf("%d", &num);
	int ret = judge(num);
	if (ret == 1)
	{
		printf("%d 是2的幂次方\n", num);
	}
	else
	{
		printf("%d 不是2的幂次方\n", num);
	}

	return 0;
}

方法2

但是方法1这种算法的时间复杂度比较高,面试官可能不满意 面试官还会追问你,还有其他方法吗? 下面我给出终极解决方案:

分析:

其实一个数n,如果是2的幂次方数,则n的二进制的补码中一定只有一个1,那n&(n-1)就会让n的2进制补码中的1小时,那n&(n-1) == 0。

根据这个思路,如果n&(n-1)的结构是0,则n是2的幂次方,如果不是0,则n不是2的幂次方。

如果你现在还有疑惑,你随便举个例子,带进去算一下,就明白了

比如:
例1:n是2的幂次方
n   = 8
n-1 = 7
0000 1000
0000 0111  &
-------------
0000 0000

例2:n不是2的幂次方
n   = 7
n-1 = 6

0000 0111
0000 0110  &
------------
0000 0110

如果明白了,请看代码:

#include <stdio.h>

//使用judge函数判断num是否为2的幂次方
int judge(int n)
{
	if ((n&(n - 1)) == 0)
		return 1;
	else
		return 0;
}

int main()
{
	int num = 0;
	scanf("%d", &num);
	int ret = judge(num);
	if (ret == 1)
	{
		printf("%d 是2的幂次方\n", num);
	}
	else
	{
		printf("%d 不是2的幂次方\n", num);
	}

	return 0;
}

好了,这个题就分享在这里,有什么问题,留言区见。 如果文章对你有用,帮忙点个赞,鼓励一下作者。

更多学习资料请点击:学习资料领取

2 的 次 方

  • 收藏
  • 评论
  • 举报

2020-02-13 11:57:59文/董玉莹

一个数的负次幂等于这个数的倒数的正次幂。-2的-2次方相当于两个-2的负一次方相乘等于1∕2×1∕2=1∕4。指数为负的话就是对底数取倒数,即负1∕2的平方,即1∕4。

2 的 次 方

-2的-2次方计算

2的-1次方相当于2的倒数1∕2

-2的-2次方相当于两个-2的负一次方相乘等于1∕2×1∕2=1∕4

负数的计算法则

一、加法

负数1+负数2=-(负数1+负数2)=负数

负数+正数=符号取绝对值较大的加数的符号,数值取“用较大的绝对值减去较小的绝对值 ”的所得值。

二、减法

负数1-负数2=负数1加上负数2的相反数,再按负数加正数的方法算

负数-正数=-(正数+负数)=负数 异号两数相减,等于其绝对值相加

三、乘法

负数1×负数2=(负数1×负数2) =正数

负数×正数=-(正数×负数)=负数

四、除法

负数1÷负数2=(负数1÷负数2) =正数

负数÷正数=-(负数÷正数) =负数

总得来说,就是同号相除等于正数,异号相除等于负数。

    2的n次方表

    2^n

    可以用POWER函数。其语法是:POWER(number,power)其中Number是底数,可以为任意实数;Power是指数,底数按该指数次幂乘方。

    举例8开3次方根:

    1)公式——自动求和——其他函数,如图:

    2)弹框选择类别(数学与三角函数)——选择函数(power)——确定,如图:

    3)弹框——power中Number输入8——power输入1/3——确定,如图:

    4)效果图:

    2^n=2^(n/2)×2^(n/2)=……以此类推。 举例说明如下: 2^8 =2^4×2^4 =2^2×2^2×2^2×2^2 =4×4×4×4 =256 扩展资料: 一个数的零次方;任何非零数的0次方都等于1。通常代表3次方:5的3次方是125,5×5×5=125;5的2次方是25,即5×5=25;5的1次方是5,即5×1=5;由此可见,n≧0时,将5的(n+1)次方变为5的n次方需除以一个5,所以可定义5的0次方为:5 ÷ 5 = 1。 0的次方: 0的任何正数次方都是0,例:0⁵=0×0×0×0×0=0;0的0次方无意义。 次方的算法: 第一种是直接用乘法计算,例:3⁴=3×3×3×3=81 第二种则是用次方阶级下的数相乘,例:3⁴=9×9=81 次方最基本的定义是:设a为某数,n为正整数,a的n次方表示为aⁿ,表示n个a连乘所得之结果,如2⁴=2×2×2×2=16。次方的定义还可以扩展到0次方和负数次方等等。

    2^n=2^(n/2)×2^(n/2)=……以此类推。 举例说明如下: 2^16 =2^8×2^8 =2^4×2^4×2^4×2^4 =16×16×16×16 =65536 扩展资料: 2^1=2 2^2=4 2^3=8 2^4=16 指数的运算法则: 1、[a^m]×[a^n]=a^(m+n) 【同底数幂相乘,底数不变,指数相加】 2、[a^m]÷[a^n]=a^(m-n) 【同底数幂相除,底数不变,指数相减】 3、[a^m]^n=a^(mn) 【幂的乘方,底数不变,指数相乘】  4、[ab]^m=(a^m)×(a^m) 【积的乘方,等于各个因式分别乘方,再把所得的幂相乘】

    在word里是用Ctrl键和+键进行切换,

    你需要安装一个叫公式编辑器的组件,OFFICE安装时,自定义安装选项里选上,默认是不安装的。

    哪里有什么计算方式, 就是2ˇn

    在公式工具界面:先点括号,选(口),然后点中间的虚框,点工具栏的分数,点分子输入2,点分母再点上下标输入2ⁿ,拉黑整个(),点上下标,上标输入n,光标向后移回到中间,输入 3即可。

    2的n次方,就是n个2相乘的积! 即,2×2×……×2,一共n个2相乘。

    直接算当然计算不出来。。。。建议考虑二分法,记得好像在汇编语言中涉及到过。。。太久了,记不清了。。。lz搞加密的么?以前有个搞加密的朋友给我说过这个问题。。。

    2的n次方的输入方法可以通过搜狗输入法打出,具体的步骤如下:

    1、将输入法调成搜都输入法,并点击搜狗输入法界面的最右角位置的“工具箱”:

    2、在弹出的对话框中选择左上角的“符号大全”。

    3、在符号大全中选择“数学/单位”,并选择需要输入的n次方(如图所示),即可完成输入。

    选重2,在打开"格式"-"字体"-"上标"(方框中打勾)_确定即可输入N 本回答被提问者采纳

2的1次方:2
2的2次方:4
2的3次方:8
2的4次方:16
2的5次方:32
2的6次方:64
2的7次方:128
2的8次方:256
2的9次方:512
2的10次方:1024
2的11次方:2048
2的12次方:4096
2的13次方:8192
2的14次方:16384
2的15次方:32768
2的16次方:65536
2的17次方:131072
2的18次方:262144
2的19次方:524288
2的20次方:1048576
2的21次方:2097152
2的22次方:4194304
2的23次方:8388608
2的24次方:16777216
2的25次方:33554432
2的26次方:67108864
2的27次方:134217728
2的28次方:268435456
2的29次方:536870912
2的30次方:1073741824
2的31次方:2147483648
2的32次方:4294967296
2的33次方:8589934592
2的34次方:17179869184
2的35次方:34359738368
2的36次方:68719476736
2的37次方:137438953472
2的38次方:274877906944
2的39次方:549755813888
2的40次方:1099511627776
2的41次方:2199023255552
2的42次方:4398046511104
2的43次方:8796093022208
2的44次方:17592186044416
2的45次方:35184372088832
2的46次方:70368744177664
2的47次方:140737488355328
2的48次方:281474976710656
2的49次方:562949953421312
2的50次方:1125899906842624
2的51次方:2251799813685248
2的52次方:4503599627370496
2的53次方:9007199254740992
2的54次方:18014398509481984
2的55次方:36028797018963968
2的56次方:72057594037927936
2的57次方:144115188075855872
2的58次方:288230376151711744
2的59次方:576460752303423488
2的60次方:1152921504606846976
2的61次方:2305843009213693952
2的62次方:4611686018427387904
2的63次方:9223372036854775808
2的64次方:18446744073709551616