精华内容
下载资源
问答
  • 快速判断一个数是否是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的幂次方,否则不是。

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

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

    展开全文
  • #define is_power_2(x) ((x>0) && (0 == (x&(x-1)))) int main() { for(int i=0; i<63; i++) { printf("%d %d\n", i, is_power_2(i)); } }  
    #include <stdio.h>
    #define is_power_2(x) ((x>0) && (0 == (x&(x-1))))
    
    int main()
    {
    	for(int i=0; i<63; i++)
    	{
    		printf("%d   %d\n", i, is_power_2(i));
    	}
    }
    

     

    展开全文
  • 一万以内2整数次幂问题描述语法思路代码其他 问题描述 输出1~10000以内2整数次幂。 语法 do while 循环语句特点:至少执行一。 do{     循环主体 } while (条件); 流程图(每次): ...

    欢迎关注笔者,你的支持是持续更博的最大动力

    问题描述

    输出1~10000以内2的整数次幂。

    语法

    do while 循环语句特点:至少执行一次。

            do{
                循环主体
            } while (条件);


    流程图(每一次循环):

    由图可看出,do while 至少执行一次循环后,才会判断 “条件” :
    真 True  —> 继续循环
    假 False —> 终止循环

    思路

    要输出的值是:
    1     2     4     8     16…
    202^0   212^1   222^2   232^3   242^4

    那么,每次用前一次计算得到的结果 ×2\times 2 后输出即可。

    代码思路

    1. 初始化 n;
      n = 1,不可设为0, 因为 0×0\times任意数 =0=0

    2. 由于 do while 循环会至少执行一次,因此:
      do{
            1)输出初始值 nn的结果(第一次循环输出1,即202^0
            2)n×2n\times2
      } while (判断 nn\leq10000?10000?)

    这样就会一直输出 2x2^x ,直到 n>10000n>10000,终止循环,不再进入do循环主体。

    代码

    int main(){
        int n = 1;            //给n一个初始值 2^0
        do {
            cout << n << " "; //此时n已经是2的整数次幂,输出n,用空格“ ”隔开 (cout:输出)
            n *= 2;           //表示 n = n * 2
            } while(n<10000); //如果此时 n<10000,继续执行循环;否则,终止循环
    }
    

    更多解法

    其他

    日常vlog: 点这里去B站~


    展开全文
  • Q1:判断一个数是否是2整数次幂 A1:从二进制的角度思考,就很容易得出答案 int func(int num) { return((num > 0) && (num & (num - 1)) == 0); } Q2:利用异或交换两数的值 A1: #...

     

    这里想要强调的是:多题多解,关键在于思维方式!

     

    Q1:判断一个数是否是2的整数次幂

    A1:从二进制的角度思考,就很容易得出答案

    int func(int num)
    {
    	return((num > 0) && (num & (num - 1)) == 0);
    }

    Q2:利用异或交换两数的值

    A1:

    #include<stdio.h>
    
    int main( )
    {
        unsigned int a=60;         //0011 1100
        unsigned int b=13;         //0000 1101
        printf("a=%d,b=%d",a,b);   //输出a,b的值
        printf("\n");
        a=a^b;                     //a=a^b=0011 0001   此类似于临时变量,它与一个值异或都能得到另一个的值
        b=a^b;                     //b=a^b=0011 1100   b应该等于a=a^b^b;
        a=a^b;                     //a=a^b=0000 1101   a应该等于b=a^b^a;
        printf("a=%d,b=%d",a,b);   //输出a,b的值
    }

     

    展开全文
  • 判断一个正整数是否是2的整数次...1.变量temp从1一直以2次幂增加,当增加到temp = target就返回true; 2.如果temp > target直接返回false; public boolean funV1(int a) { int temp=1; //迭代变量,从1开始 whil
  • 题目:给定一个整数n,判断它是否为2的正整数次幂。 题目解析:即判断n的二进制表示里面是否只有一个1。 源码: #include <stdio.h> void result_is_2n(int n); int main(void) { int n; scanf("%d",&n); ...
  • 题目:判断一个正整数是否是2整数次幂 解法一:设置一个中间变量初始值为1,将输入的正整数不断和初始值比较,如果初始值小于输入的整数,就乘2再比较,直到后面相等返回true或者大于输入的整数返回false。 举个...
  • 运算,判断一个整数是否是2整数次幂。 分析过程: 二进制数的位权是2的n次方,通过观察发现如果一个数m是2的n(n>=0 )次方,那么它的二进制数的最高位必定为1,其余位都是0; 比如2 -->10 2^2 -->100 2^...
  • 快速判断一个数是否是2次方,若是,并判断出来是多少次方!将2次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了...
  • 题目: 实现一个方法,来判断一个正整数是否是2整数次幂(如:16是2的4次方,返回true;18不是2整数次幂,则返回false)。要求性能尽可能高。 解题思路: 我们将2整数次幂转换成二进制数,会发现2整数次幂...
  • // 判断v是否为2 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 // 改变表示方法,可以使用下面的方法: f = v && !(v & (v - 1)); 转载于:...
  • 实例如下: ... 您可能感兴趣的文章:C语言判断一个数是否是2次方或4的次方如何判断一个数是否为4的次方?若是,并判断出来是多少次方?如何判断一个数是否为2次方?若是,并判断出来是多少次方?
  • 快速判断一个数是否是2次方,若是,并判断出来是多少次方! 将2次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以...
  • 2整数幂次方转换为二进制后,仔细观察后会很容易发现一个特点:整串数字中只有一个1,在其后跟了多个0. 比如: 2:10; 4:100; 8:1000;  ·  ·  · 128:10000000 所以我们只要判断...
  • c语言上机题库(阅读)1、给定n个数据, 求最小值出现的位置(如果最小值出现多,求出第一出现的位置即可)。2、编写程序求无理数e的值并输出。计算公式为:e=1+1/1!+1/2!+1/3!+......+1/n!当1/n!<0.000001时e=2....
  • 判断一个整数是否是2次幂 2次幂指的是2n,例如20,21,22,23,24,25,…… 算法说明 通过x & (x - 1)来实现,这个公式会使x中位置最靠右并且值为1的bit位置0,例如0101 1010 =>0101 1000。 如果是x是2...
  • 快速判断一个数是否是2次方,若是,并判断出来是多少次方!将2次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了...
  • 判断一个整数是不是2整数次方。解:程序:#includeint count(int t){ int count=0; while (t) { count++; t=t&(t-1); } return count;}int main(){ int num,ret=0; printf("请输入一个整数:"); scanf("%d", &num...
  • // 判断v是否为2 bool f; // f为判断的结果 f = (v & (v - 1)) == 0; // 结果为0表示不是2 // 改变表示方法,可以使用下面的方法: f = v && !(v & (v - 1));  转载于:...
  • C语言整数

    2020-04-25 22:50:56
    文章目录一、整数的概念二、整数的取值范围三、整数的输出四、二进制数、八进制数和十六进制数的书写1、二进制2、八进制3、十六进制4、需要注意的坑五、常用的库函数六、数据类型的别名七、随机数1、生成随机数2、...
  • LeetCode:319. Bulb Switcher ...一行C语言表达式判断给定的整数是否是一个2幂判断给定的整数是否是一个2 8、 给出一行C语言表达式,判断给定的整数是否是一个2。 答案:(b & (b-1)) == 0 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,683
精华内容 3,073
关键字:

c语言判断2的整数次幂

c语言 订阅