2的整数次幂请问怎么算呀?

2的整数次幂请问怎么算呀? 请大家指教一下,先谢谢了。。。。。。。

0

5个回答

0001 = 2^0
0010 = 2^1
0100 = 2^2
1000 = 2^3
...
所以计次幂就是把1左移几位。

0
a1193561652
纵横车 回复qq_29670983: 如果要算2的n次方,就unsigned int i = 1;i = i << n;
3 年多之前 回复
qq_29670983
qq_29670983 还是不明白请问能详细的说下嘛
3 年多之前 回复

区分结果精度要求,以及数据规模,有如下两种情况:
1 当数据规模被限定,非负整数,且结果要求准确值时,可以用整型进行计算。
(1) 依照数学定义进行计算。
int pow_2(int i)
{
int r = 1;
while(i --) r*=2;//将2自乘i次,得到2的i次方。

return r;

}
(2) 由于2的特殊性,可以转为移位方式,计算结果。
int pow_2(int i)
{
return 1<<i;//将一个数左移一位,在没有溢出的情况下,等效于乘2。于是2的i次方就是1<<i。该方法更高效。

}

2 当数据规模偏大,整型会溢出时,需要用浮点型存储。如果i为负数,或浮点型数,那么同样需要浮点型存储。这时需要使用数学函数pow。
double pow(double x, double y);
声明与math.h, 功能为求x的y次方。
于是2的y次方可以写作
pow(2,i);

0

这个可以用递归,用递归效果非常好,

0

我们一般求解m的n次方,一般使用n个m相乘的办法来求解。其实我们还可以使用另外一种更有效率的办法求解这个问题。我们知道一个数的0次方等于1,一个数的1次方等于该数本身。如果一个数的n次方的n可以被2整数,我们可以将求解的问题,分解为m的(n/2)次方乘以m的(n/2)次方。如果不能被2整除,则可以将问题求解转变为m乘以m的(n-1)次方,通过这个递归的办法,我们可以很快的分解求出问题。编写代码如下:
#include

unsigned long myPow(int m, int n)
{
unsigned long tmp;
if(n == 0)
return 1;
if(n == 1)
return m;
if(n % 2 == 0){
tmp = myPow(m, n/2);
return tmp*tmp;
}
else{
return m*myPow(m, n-1);
}
}

int main(int argc, char *argv[])
{
int m,n;
printf("please input the bottom number.\n");
scanf("%d", &m);
printf("please input the exponent number.\n");
scanf("%d", &n);
printf("the result of power(%d,%d) is %ld\n", m, n, myPow(m, n));

return 0;
}

0

在long long范围内可以直接位运算,就是
x=1<<n //n为几次方
所以求2的幂时就是用位运算,简单而且快速具体原理就是上面那个0001,0010,0100,1000的描述

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言:求2的整数次幂的两种方法
循环结构 #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; int main() { int i,j,n; double power=1; printf(&amp;amp;quot;请输入整数指数n=&amp;amp;quot;); scanf(&amp;amp;quot;%d&amp;amp;quot;,&amp;amp;amp;amp;n); if(n&amp;amp;amp;gt;=0) { for
算法练习-给一个正整数n,计算它最多能被2的多少次幂整除
给一个正整数n,计算它最多能被2的多少次幂整除题目分析解法1解法2 题目分析 输入:正整数n 输出:2的k次幂 根据题目,我们只需要从0次开始,循环每次K+1,直到2的k次幂大于正整数n跳出循环。 解法1 #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;math.h&amp;amp;gt; #include &amp;amp;lt;stdlib.h&amp;amp;gt; int fun(int n) { int...
整数快速幂——次方求模
先上代码: unsigned Power(unsigned n, unsigned p) { // 计算n的p次方     unsigned odd = 1; //oddk用来计算“剩下的”乘积     while (p > 1)     { // 一直计算到指数小于或等于1        if (( p & 1 )!=0)       { // 判断p是否奇数,偶数的最低位必为0
[算法问题]判断一个数是不是2的幂?
bool Is2Power(int nNum) {     return nNum > 0 ? ((nNum & (~nNum + 1)) == nNum ? true : false) : false; }
怎么计算一个数是2的几次幂?
怎么计算一个数是2的几次幂?
java 如何判断一个数是否为2的整数次幂
当不考虑负数时,对于此题分析可知,当输入值小于1时,此数肯定不是2的整数次幂。 当输入值大于一时,我们可以发现一个规律。2的整数次幂用二进制表示为: 2d = 10b;  4d = 100b; 8d = 1000b 二进制首位为一,其余各位均为零。 所以我们可以通过判断输入值转换为二进制时首位为一,其余各位为0,这样就能保证输入值为2的整数次幂。 但是这样做又过于繁琐,我们可以只判断二进
邻接矩阵的幂
邻接矩阵幂的含义
判断一个数是不是2的整数次幂(两种方法)
方法一:用这个数来除以2,得到商和余数,如果余数不为0,那这个数就不是2的整数次幂,否则再用商除以2,又得到商和余数,重复上面的操作,直到商为1,当商为1,余数为0时,这个数就是2的整数次幂当商为0。 #include &amp;lt;iostream&amp;gt; using namespace std; int edge(int n) { if (!n) return 0; ...
矩阵的幂次方
问题描述   给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22 输入格式   第一行是一个正整数N、M(1&amp;lt;=N&amp;lt;=30, 0&amp;lt;=M&amp;lt;=5),表示矩阵A的阶数和要求的幂数   接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出格式   输出共N行,每行...
判断一个正整数是否为2的整数次幂的宏定义
判断一个正整数是否为2的整数次幂的宏定义 #include    //取反加1后与原数相与还是等于原来的那个数就说明是2的n次幂 #define  S(n) ( ((n & ((~n) + 1))) ==n)   int main() {     int i;     while (1)     {         scanf("%
判断一个数是不是2的整数次幂(两种方法)
方法一: 拿这个数来除以2,得到商和余数,再用商除以2,又得到商和余数,重复上面的操作,直到商为0,当商为0,余数也为0时,这个数就是2的整数次幂当商为0,余数不为0时,这个数就不是2的整数次幂。 程序如下: #include using namespace std; int fun(int n) {     if(n==
超大数次幂再求余
H - Super A^B mod C Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description Given A,B,C, You should quickly calculate the result of A^B m
如何判断一个整数是2的n次幂
一、如何判断一个整数是2的n次幂? 分析可以用枚举法判断一个数是2的你次幂,代码如下: package com.aim.getoff; import java.math.BigInteger; import java.util.Scanner; public class Judge2N { public static void main(String[] args) { Scanner scc ...
计算机中如何实现除数是2的幂次的除法
前言: 本来是在看汇编里面的数据条件传送指令,做习题的时候看着me
C# 判断一个数是否是2的n次幂
判断一个数是否是2的n次幂 private bool Get2Flag(int num) { if (num < 1) return false; return (num & num - 1) == 0; }
2的次幂 -- 程序员大数计算必备
最近做IPV6,需要将IPV6转换成一个大数,方便操作。因为ipv6格式是128位,传统处理方式已经不起作用,只要找来大数运算的东东,贴出2的1000以内次幂的值,大家可以参考。
求一个数的临近的较大的2的整数次幂nextPow2
最近在看recast&amp;amp;detour源码的时候有遇到许多数学上的算法问题,特此记录,以便以后查看。思路:目标数是2的幂次,转化成二进制思考,就是某一个位是1,其他位置都是零。比如第x位是1,其他位都是零,那么,此数就是2的(x-1)次幂,此数可以通过 第x-1位到第1位都设置为1,然后再加1得到。比如9的二进制表示 00001001(第4位为1),最接近9的目标值为  00010000(第5...
判断一个数是否是2的整数次幂,python实现。
问题:判断一个数是否是2的整数次幂?分析一:判断一个数是否是是2的整数次幂。方法和思路也很多,其中最简单的就是,用这个数除以2用除的商再除以2,直到最后被除数为2,证明这个数是2的整数次幂。这种思路简单,但是略显笨重。我们采用第二种思路。 分析二:由于2这个数在计算机中是一个比较特殊的数。计算机是以二进位制进行运算的。于是有了按位与,或,异或和非的运算。2的整数次幂都有一个共同的特点,就是以二进制
[转]找到大于一个正整数N的最小2的次幂数
在看JDK1.7中ArrayDeque源码时,有一个函数是这样写的: private void allocateElements(int numElements) { int initialCapacity = MIN_INITIAL_CAPACITY; // Find the best power of two to ho...
快速判断一个数是否是2的幂次方c++
将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。         如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。        最快速的方法:       (number & number -
关于如何判断一个数是否是2的整数次方的问题
有这样的一道题: 有一串奇怪数列如下:1 2 -3 4 -5 -6 -7 8 -9 ...  即从1-n,碰到2的次方倍则显正,其他则是负数。(2的整次方包括:1,2,4,8,16,32,64,128,....)  现在给你一个n,求出,这个数列的和。 直接来判断一个数是不是2的整数次方并不好判断,此时我们可以用位运算来快速解决。 我们把2的整数次方的数化成一个二进制数,会发现,所有这样的二...
计算2的n次幂
<br /> 可以通过for循环类累加,实现2的次幂计算,但是它的长度是有限的,计算次幂再一次对数据类型的长度复习一遍。<br /> <br />如下:<br />byte Byte 无符号整数 8 0 到 255<br />sbyte SByte 有符号整数 8 -128 到 127<br />int Int32 有符号整数 32 -2,147,483,648 到 2,147,483,647<br />uint UInt32 无符号整数 32 0 到 4294967295<br />short Int16
C语言计算任意数的任意次方
650) this.width=650;" border="0" alt="" src="http://img1.51cto.com/attachment/201110/213306673.jpg" />    #include "stdio.h"  #include"stdlib.h"  #define max 500  void yiwei(int *a,int n,int m)  {  
java 算法之 递归求2的次幂
// 2的次幂 public static int check(int num) { if (num % 2 == 0) { int count = num / 2; if (count &amp;gt; 0 &amp;amp;&amp;amp; count != 1) { count = check(count); } re...
一个偶然的小经验快速计算2的n次幂
在很多面试的时候都会出现一个数多少次方 怎样最快的计算出来,而这个数大多是2的n次幂 比如8的15次方 第一种:很陋的方法 for循环 int i=1; for(int i=0;i i=i*8; } 第二种 Math.pow(8, 15); 算最常用的一种了 第三种 这种需要在合适的时候用 比如:8的15次方 相当于2的45次方 即1*2的45次方;这个
1102: 整数幂(C语言输出左对齐格式)
Problem Link:http://139.129.36.234/problem.php?id=1102 1102: 整数幂 时间限制: 1 Sec  内存限制: 128 MB 提交: 5  解决: 2 [提交][状态][讨论版] 题目描述 输入3个整数,输出它们的1次幂、2次幂和3次幂。 输入 输入3整数,用空格隔开 输出 输出
如何机智的判断一个整数是否是2的n次方幂
编程之美-微软技术面试心得这本书中详细的讲了几种方法,有兴趣可以去看看。 我现在只写两种比较容易理解的方法。 第一种 2   10 4   100 8   1000 。。。。。 发现规律没有,2的n次方变成二进制后首位为1,其余位都为0。 所以嘞,我们讨巧的可以这么做,假设输入的为int型: boolean powerof2(int n) { return ((n
【OJ练习】判断2的次幂
题目描述: 给定一个整数n,判断这个整数是否是2的N次方 样例输入 3 样例输出 0 接口说明: 原型:int checker(int n); 输入参数:int n 返回值:0:否  1:是 思路: 由于2的N次方的数二进制表示是第1位为1,其余为0,而x-1(假如x为2的N次方)得到的数的二进制表示恰恰是第1位为0,其余为1,两者相与,得到的结果就为0,否则结果肯定不为0。
把一个整数分解为2的幂次的算法
任何数都可以分解为2的幂,假定给一个整数n,把他转换为以下形式: 比如n = 7时。 7=1+1+1+1+1+1+1   =1+1+1+1+1+2   =1+1+1+2+2   =1+2+2+2   =1+1+1+4   =1+2+4 共有6种划分方法。   这里用到递归算法:f(2m+1)=f(2m); f(2m)=f(2m-1)+f(m);点击打开链
获取大于等于一个整数的最小2次幂算法(HashMap#tableSizeFor)
一、需求 给定一个整数,返回大于等于该整数的最小2次幂(2的乘方)。 例: 输入 输出 -1 1 1 1 3 4 9 16 15 16 二、分析 当遇到这个需求的时候,我们可能会很容易想到一个"笨"办法:...
如何快速判断一个数是不是2的几次幂
将2的幂次方写成2进制形式后,很容易就发现一个特点:二进制中只有一个1,并且1后面全是0,如果将这个数减去1后会发现,仅有的1会变成0,而其他0则会变成1,所以将已知数和已知数减一进行与运算会发现等于0 #include &amp;lt;iostream&amp;gt; using namespace std; int main() //判断一个数是不是2的整数次幂 { int n; ...
判断一个无符号整数是否为2的幂次方
判断一个无符号整数是否为2的幂次方   Number to check: if n is a power of 2 /** *  Returns true if n is a power of 2 * @param n * @return 1 if true, 0 otherwise */ static inline int x_is_power_of_2(unsinged int...
整数次幂的递归求解
整数次幂一般解法时间复杂度O(n)O(n)的方法可以迭代n次,然后相乘结果返回,例如求xnx^n伪代码:double pow(x,n) { res=x; while(n--) res*=x; return res; }递归法使用递归的方法可以将复杂度降低到O(logn)O(logn) 思路是比如一个数的8次幂,可以看成4次幂乘4次幂,进而分成
基二时间抽取的MATLAB代码
2的整数次幂点数的离散傅里叶变换MATLAB代码
2的整数次幂点数的基-2DIT-FFT和DIF-FFT
编制任意2的整数次幂点数的基-2DIT-FFT和DIF-FFT通用c/c++程序,验证其正确性,并与直接计算DFT比较点数为2的N次方(N=10~16)时运行时间的差异。
时间复杂度O(logn),空间复杂度O(1)求一个数double x的n次幂
#include &amp;lt;iostream&amp;gt; using namespace std; double f(double x, int n); int main(){ cout&amp;lt;&amp;lt;f(3, 6)&amp;lt;&amp;lt;endl; return 0; } double f(double x, int n){ ...
int a 判断a是否是2的n次幂(a 是一个正整数)
此处想到三种方法实现方法一:2的n次幂,2^0-&amp;gt;1,2^1-&amp;gt;2 ,2^2(2 * 2)-&amp;gt;4,2^3(2 * 2 * 2)-&amp;gt;8,2^4(2 * 2 * 2*2)-&amp;gt;16 .....因此可以将传入的值不断和n * 2 做对比,只要相等就为2^npublic static boolean f3(int a) { boolean b = false; ...
2的非负整数n次幂转化为十六进制
当值x为2的非负整数n次幂时,也就是x=2^n,其对应的二进制就是1开头,后面都是0,转化为十六进制就是n=y+4*z,z是十六进制中后面0的个数,2^y的是十六进制最前面的数。
2的多少次幂
2的多少次幂 Time Limit: 1 Sec  Memory Limit: 2 MB Submit: 9692  Solved: 4945 [Submit][Status][Web Board] Description 从键盘输入一个数x,x是2的整数次幂(x=2y),请编程求出y的值。 Input 一个非负有理数x,x在[0,2256]范围内。 Output 一个
1005: 整数幂
1005: 整数幂 Time Limit: 1 Sec  Memory Limit: 30 MB Submit: 25745  Solved: 10732 SubmitStatusWeb Board Description 输入3个整数,输出它们的1次幂、2次幂和3次幂。 Input 输入3整数,用空格隔开 Output 输出3行,每行3个整数,分别是
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 从零学习呀大数据 python基础教程2