【java】判断一个数是不是2的N次方

转载 2015年11月18日 10:35:40

第一种方法,对N进行循环除以2. 

  1. public boolean nCF(int n){  
  2.     boolean b = false;  
  3.     while(true){  
  4.         int j=n%2;  
  5.         n=n/2;  
  6.         if(j==1){  
  7.             b=false;  
  8.             break;  
  9.         }if(n==2){  
  10.             b=true;  
  11.             break;  
  12.         }  
  13.           
  14.     }  
  15.     return b;  
  16. }  
第二种方法,算2的N次方数据,比较N,小于继续乘以2.等于的话就是2的N次方。大于的话就不是2的N次方。

  1. public boolean nCF2(int n){  
  2.     boolean b = false;  
  3.     int x = 2;  
  4.     while(true){  
  5.         if(x==n){  
  6.             b=true;  
  7.             break;  
  8.         }if(x<n){  
  9.             x=2*x;  
  10.         }else{  
  11.             b=false;  
  12.             break;  
  13.         }  
  14.     }  
  15.     return b;  
  16. }  


第三种方法,2的N次方。用二进制表示都是10,100,1000…… 
然后的话就有了第三种方法。 
  1. public boolean nCF3(int n){  
  2.     boolean boo = true;  
  3.     String s = Integer.toBinaryString(n);  
  4.     byte[] b = s.getBytes();  
  5.   
  6.   
  7.     for(int i=1;i<b.length;i++){  
  8.         if(b[i]!=48){  
  9.             boo = false;  
  10.             break;  
  11.         }  
  12.     }  
  13.     return boo;  
  14.       
  15. }  

最简单快捷的一种
private static boolean isPowerOfTwo(int val) {
        return (val & -val) == val;
    }

在js中
#使用 $result = x&(x-1) 来判断;
if(x & (x-1))
{
   echo "不是2的n次方"
}
else
{
   echo "是2的n次方"
}



相关文章推荐

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

对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。 void judge(int n) { wh...

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

对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。 void judge(int n) { wh...

快速判断一个数是否是2的幂次方c++

将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0; 因此问题可以转化为判断1后面是否跟了n个0就可以了。         如果将这个数减去1后会发...

剑指offer 求一个数的n次方,不考虑大数问题

一定得注意取值,当指数小于0,指数大于0,指数等于0时 如果指数和底数都是0时怎么办,还有浮点数的比较#include #define ESP 0.0000001 typedef enum boo...

zjut 1740 Find x 从此题推广到求一个数的N次方的小数精度问题

这题题意就是给定一个1~21的整数,求出其开三次方的值,保留小数点100位。这题大概的做法就是先由普通开三次方确认一个头,然后通过大数乘逐位逼近结果,因为小数比较麻烦,所以只能每次逼近一位,在逼近的字...

Java数据结构与算法之2的n次方判定

2的N次方,你将如何判定?

南邮acm 1009 2的N次方 java解法

2的N次方 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:1735            测试通过:850 ...

Java程序练习-计算2的N次方

计算2的N次方 时间限制: 1000ms内存限制: 65536kB 描述 任意给定一个正整数N(N 输入 输入只有一个正整数N。 输出 输出2的N次方的值。 样例输入 5 样例输出...

位运算(一):判断一个正整数是否可表示为2的N次方

题目:判断一个正整数num是否可表示为2的N次方。 对于这样一道题目,最简单的做法就是定义一个变量,并让其以2的n(n=0,1,2,3,...)次方递增,每次递增后与num比较,如果相等则返回tru...

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

题目:给定一个整数num,判断这个整数是否是2的N次方。比如,2,4,8是2的那次方,6,10不是2的N次方。 请看下面的程序:public static bool Check1(int nu...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)