如何判断一个数是2的N次方?小鸟寻求高手帮组~~!!
我是个初学者 大家帮忙下。。
3Q~~

解决方案 »

  1.   

    $a = 122;
    for($i=2;$i<=$a;$i=$i*2)
    {
    if ($a==$i) echo "yes"; 
    }
      

  2.   

    (0,1自己判断一下就可以了 ,这种写法可以提高鉴别效率,减少时间。时间复杂度应该是:log(n))
    int n = 122;
    int iTemp = n;
    boolean bFlg = true;
    for (int i = 1; i <= n / 2; i*2){
      if (iTemp%2 == 1) {
         bFlg = false;
         break;
      } else {
        iTemp = iTemp / 2;
      }
    }
    你试试吧
      

  3.   

    if( n & (n-1) ==0 )return true;
    return false;
      

  4.   

    (i & (i - 1)) == 0 
      

  5.   

    import java.util.*;
    public class PanDuan {
        public static double JiSuan(double n)
        {
         double x;
         x = n/2;
         if(x>=3)
           x = JiSuan(x);
         return (x);
        }
        public static void main(String[] args)
          {
                 double m,y;
                 System.out.println("请输入所需判断的数字:");
                 Scanner reader = new Scanner(System.in);
                 m = reader.nextDouble();
                 if(m == 2)
                  System.out.println("该数是2的n次方");
                 else
                 {
                 y = JiSuan(m);
                 if(y == 2)
                  System.out.println("该数是2的n次方");
                 else
                  System.out.println("该数不是2的n次方");
                 }
             }
    }
      

  6.   


    i是什么类型的,怎具体怎么写啊?我用scanner写怎么都不对啊?
      

  7.   

    4楼正解。
    正整数都成立。short、int、long类型都可以。
      

  8.   


    //N是负数的情况我没考虑
    public static boolean check(int n){
    boolean flag = false;
    int i  = 2;
    if((i >> 1) == n){
    flag = true;
    }else{
    while(i <= n){
    if(i == n){
    flag = true;
    break;
    }
    i = i << 1;
    }
    }

    return flag;
    }
      

  9.   

    /**
     * [简要说明] 判断一个数是否是2的n次幂
     * [详细说明] 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false
     * @param num
     * @return
     */
    public boolean judgePower (int num)
    {
    if (num%2 == 0 && num != 0)
    {
    return true;
    }

    return false;
    }
      

  10.   


    /**
     * [简要说明] 判断一个数是否是2的n次幂
     * [详细说明] 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false
     * @param num
     * @return
     */
    public boolean judgePower (int num)
    {
    if (num%2 == 0 && num != 0)
    {
    return true;
    }

    return false;
    }
      

  11.   

    谢谢大家的帮助 对我很有用3Q3Q3Q3Q3Q~~~
      

  12.   

    /**
     * 找不到最快的最好的,我是这样做的 [简要说明] 判断一个数是否是2的n次幂 [详细说明]
     * 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false
     * 
     * @param num
     * @return
     */
    public boolean judgePower(int num) {
    if (num < 1)
    return false;
    while (num > 2) {
    if (num % 2 == 1)
    return false;
    else
    num = num / 2;
    }
    return true;
    }

    public void testNegative(){
    assertFalse(judgePower(-1));
    }

    public void testZero(){
    assertFalse(judgePower(0));
    } public void testTrue(){
    assertTrue(judgePower(1));
    assertTrue(judgePower(2));
    assertTrue(judgePower(4));
    assertTrue(judgePower(8));
    assertTrue(judgePower(16));
    assertTrue(judgePower(32));
    }

    public void testF(){
    assertFalse(judgePower(3));
    assertFalse(judgePower(5));
    assertFalse(judgePower(6));
    assertFalse(judgePower(7));
    assertFalse(judgePower(9));
    assertFalse(judgePower(10));
    }
      

  13.   

    1)由于2的N次方的数二进制表示是第1位为1,其余为0,而x-1(假如x为2的N次方)得到的数的二进制表示恰恰是第1位为0,其余为1,两者相与,得到的结果就为0,否则结果肯定不为0。
    2)代码:
     return ((num & (num - 1)) == 0) ? true : false;