精华内容
下载资源
问答
  • 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了...

    快速判断一个数是否是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的幂次方或4的幂次方的方法,并且判断出来是多少次方,需要的朋友可以参考下
  • pow() 函数用来求 x 的 y 次(次方)pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = xy。3、举例如下:double a = pow(4, 2); // 计算4的平方4、可能导致错误的情况:如果底数 x 为...

    1、头文件:#include

    2、原型:

    double pow(double x, double y);

    pow() 函数用来求 x 的 y 次幂(次方)

    pow()用来计算以x 为底的 y 次方值,然后将结果返回。设返回值为 ret,则 ret = xy。

    b05e09a3f3395b72b1d994a10c8214fb.png

    3、举例如下:

    double a = pow(4, 2);  // 计算4的平方

    4、可能导致错误的情况:

    如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误。

    如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。

    如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 或 pole error 错误,也可能没有;这跟库的实现有关。

    如果返回值 ret 太大或者太小,将会导致 range error 错误。

    错误代码:

    如果发生 domain error 错误,那么全局变量 errno 将被设置为  EDOM;

    如果发生 pole error 或 range error 错误,那么全局变量 errno 将被设置为 ERANGE。

    注意:1、使用pow函数时,需要将头文件#include包          含进源文件中。

    2、用pow(x,y)的话要用到math.h头文件。

    扩展资料:

    1、 三角函数: double sin (double);正弦   double cos (double);余弦   double tan (double);正切

    2 、反三角函数:   double asin (double); 结果介于[-PI/2, PI/2]   double acos (double); 结果介于[0, PI]   double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]   double atan2 (double, double); 反正切(整圆值), 结果介于[-PI/2, PI/2]

    3 、双曲三角函数:   double sinh (double);   double cosh (double);   double tanh (double);

    4 、指数与对数:   double exp (double);   double sqrt (double);开平方   double log (double); 以e为底的对数   double log10 (double);以10为底的对数   double pow(double x, double y);计算以x为底数的y次幂   float powf(float x, float y); 功能与pow一致,只是输入与输出皆为浮点数

    5 、取整:   double ceil (double); 取上整   double floor (double); 取下整

    6 、绝对值:   double fabs (double);求绝对值   double cabs(struct complex znum) ;求复数的绝对值

    7 、标准化浮点数:   double frexp (double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] )   double ldexp (double x, int p); 与frexp相反, 已知x, p求f

    8 、取整与取余:   double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分   double fmod (double, double); 返回两参数相除的余数

    9 、其他:   double hypot(double x, double y);已知直角三角形两个直角边长度,求斜边长度   double ldexp(double x, int exponent);计算x*(2的exponent次幂)   double poly(double x, int degree, double coeffs [] );计算多项式   nt matherr(struct exception *e);数学错误计算处理程序

    展开全文
  • 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了...

    快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。

    如果将这个数减去1后会发现,仅有的那个1会变为0,而原来的那n个0会变为1;因此将原来的数与去减去1后的数字进行与运算后会发现为零。

    最快速的方法:

    (number & number - 1) == 0

    原因:因为2的N次方换算是二进制为10……0这样的形式(0除外)。与上自己-1的位数,这们得到结果为0。例如。8的二进制为1000;8-1=7,7的二进制为111。两者相与的结果为0。计算如下:

    1000

    & 0111

    -------

    0000

    使用递归来实现的代码如下:

    #include "stdio.h"

    #include "stdlib.h"

    int log2(int value) //递归判断一个数是2的多少次方

    {

    if (value == 1)

    return 0;

    else

    return 1+log2(value>>1);

    }

    int main(void)

    {

    int num;

    printf("请输入一个整数:");

    scanf("%d",&num);

    if(num&(num-1)) //使用与运算判断一个数是否是2的幂次方

    printf("%d不是2的幂次方!\n",num);

    else

    printf("%d是2的%d次方!\n",num,log2(num));

    system("pause");

    return 0;

    }

    使用非递归来实现的代码如下:

    #include "stdio.h"

    #include "stdlib.h"

    int log2(int value) //非递归判断一个数是2的多少次方

    {

    int x=0;

    while(value>1)

    {

    value>>=1;

    x++;

    }

    return x;

    }

    int main(void)

    {

    int num;

    printf("请输入一个整数:");

    scanf("%d",&num);

    if(num&(num-1)) //使用与运算判断一个数是否是2的幂次方

    printf("%d不是2的幂次方!\n",num);

    else

    printf("%d是2的%d次方!\n",num,log2(num));

    system("pause");

    return 0;

    }

    扩展:求一个数n的二进制中1的个数。

    非常巧妙地利用了一个性质,n=n&(n-1) 能移除掉n的二进制中最右边的1的性质,循环移除,直到将1全部移除,这种方法将问题的复杂度降低到只和1的个数有关系。代码如下:

    int Func3(int data)

    { //利用了data&(data-1)每次都能移除最右边的1,移除了多少个1,就是包含了几个1

    int count = 0;

    while (data)

    {

    data = data & (data-1);

    count++;

    }

    return count;

    }

    扩展问题二:

    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的幂次方,否则不是。

    使用递归来实现的代码如下:

    #include "stdio.h"

    #include "stdlib.h"

    bool fn(unsigned int x) //判断x是否是4的幂次方

    {

    if ( x & (x - 1) ) //判断x是否为2的幂次方

    return false;

    return x & 0x55555555; //判断1是否在奇数位置上

    }

    int log4(int value) //递归判断一个数是4的多少次方

    {

    if (value == 1)

    return 0;

    else

    {

    value>>=1; //往右移位

    return 1+log4(value>>1); //往右移位

    }

    }

    int main(void)

    {

    int num;

    printf("请输入一个整数:");

    scanf("%d",&num);

    if(fn(num)) //使用与运算判断一个数是否是2的幂次方

    printf("%d是4的%d次方!\n",num,log4(num));

    else

    printf("%d不是4的幂次方!\n",num);

    system("pause");

    return 0;

    }

    使用非递归来实现的代码如下:

    #include "stdio.h"

    #include "stdlib.h"

    bool fn(unsigned int x) //判断x是否是4的幂次方

    {

    if ( x & (x - 1) ) //判断x是否为2的幂次方

    return false;

    return x & 0x55555555; //判断1是否在奇数位置上

    }

    int log4(int value) //非递归判断一个数是4的多少次方

    {

    int x=0;

    while(value>1)

    {

    value>>=1; //往右移位

    value>>=1;

    x++;

    }

    return x;

    }

    int main(void)

    {

    int num;

    printf("请输入一个整数:");

    scanf("%d",&num);

    if(fn(num)) //使用与运算判断一个数是否是2的幂次方

    printf("%d是4的%d次方!\n",num,log4(num));

    else

    printf("%d不是4的幂次方!\n",num);

    system("pause");

    return 0;

    }

    时间: 2016-06-03

    展开全文
  • C语言之数学计算幂次方

    万次阅读 2016-01-03 15:57:10
    C语言之数学计算幂次方 1.包含#include "math.h" 2.pow();

    C语言之数学计算幂次方


    1.包含#include "math.h"

    2.pow();


    展开全文
  • 二次元的幂次方吧 任何一个正整数都可以用2的幂次方表示。 例如: 137=27+23+20 同时约定次方用括号来表示,即ab 可表示为a(b)。 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 22+2+20(21用2...
  • 一个正整数用2的幂次方表示 实例一个正整数用2的幂次方表示 实例一个正整数用2的幂次方表示 实例一个正整数用2的幂次方表示 实例
  • 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了...
  • c语言幂运算

    2011-10-22 18:08:35
    e的x次方的一个代码,很简单具体的问题。希望对你有帮助
  • 用2的幂次方表示正整数(C语言

    千次阅读 2019-06-01 00:26:44
    任何一个正整数都可以用2的幂次方表示。例如:  137=27+23+2^0  同时约定幂次方用括号来表示,即ab 可表示为a(b)。  由此可知,137可表示为:  2(7)+2(3)+2(0) 进一步:7= 22+2+20 (21用2表示)  3=2+...
  • 任意次方后的三位数,即求x^y的最后三位数,x,y的值由键盘输入 #include<stdio.h> int main() { int a,b,i,result=1,x; /*a--底数,b--数,i--控制循环次数的量,result--结果,x--后三位数字 */ printf(...
  • C语言递归算法-2的幂次方表示

    千次阅读 2018-05-21 00:08:19
    描述任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为: 2(7)+2(3)+2(0)进一步:7=22+2+20(21用2表示) 3=2+20所以最后137可表示...
  • c语言没有次方符号

    2014-12-08 13:16:43
    ">返回值:x不能为负数且y为小数,或者x为0且y小于等于0,返回指数的结果。</span></p><p><span style="color:#33FF33;">返回类型:...
  • c语言幂函数_了解C / C ++中的幂函数

    千次阅读 2020-07-19 22:04:52
    c语言幂函数In this article, we’ll take a look at understanding the power function in C / C++. 在本文中,我们将了解C / C ++中的幂函数。 The power function computes the power of a base, raised to an ...
  • 幂次方

    2016-05-06 18:17:59
    任何一个正整数都可以用2的幂次方表示。例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b)。 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 2^2+2+2^0 (2^1用2表示) 3=2+2^...
  • for (i = 0; i < n; i++) { result *= num; // num 为底数,n 为, result 为结果 }循环表示:S=a^10可表示为:for(int...C语言运算是很耗资源的,10的3次方一般表示为10*10*10,或者for循环乘10,这样电脑...
  • 本篇文章是对如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方的实现方法,进行了详细的分析介绍,需要的朋友参考下
  • 本篇文章是对如何判断一个数是否为2的幂次方?若是,并判断出来是多少次方的实现方法,进行了详细的分析介绍,需要的朋友参考下
  • 洛谷 P1010 幂次方

    2019-09-25 15:32:39
    P1010 幂次方 题目描述 任何一个正整数都可以用2的幂次方表示。例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b)。 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步:7= 2...
  • 这道题其实可以看作是:十进制转二进制的问题。 如果你基础不太好没关系,记住十进制转二进制的口诀:除二取余 #include<stdio.h> int try(int n,int r); int main() { int n; scanf("%d",&...int tr.
  • while(i>=0) { //i表示数组b的下标,同时,也表示次数 if(b[i]==1) { if(i==0) printf("2(0)"); else if(i==1) printf("2"); else { printf("2("); Turn(i); printf(")"); } if(cnt>1) { cnt--; printf("+"); } }...
  • CCF NOI1074 2的幂次方表示

    千次阅读 2017-05-03 00:43:53
    问题链接:CCF NOI1074 2的幂次方表示。 时间限制: 1000 ms 空间限制: 262144 KB 题目描述   任何一个正整数都可以用2的幂次方表示。例如:137=27+23+20。同时约定方次用括号来表示,即ab可表示为a(b)。由此...
  • 质因数的幂次方

    2020-03-28 12:30:21
    质因数的幂次方的记录统计 #include<iostream> using namespace std; bool mark[10001]; int prime[10001]; int primeSize; void init(){ primeSize = 0; for(int i = 2; i <= 10000;i++){ if(mark[i...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,771
精华内容 1,908
关键字:

c语言幂次方

c语言 订阅