给定一个数,如何判断该数是不是2的n次方?请给出具体的程序代码,谢谢!

解决方案 »

  1.   


    Scanner scan = new Scanner(System.in);
    int value = scan.nextInt();
    boolean flag = false;while(value != 0) {
      
       if(value % 2 != 0) {
          flag = true;
          break;
       }
       value /= 2;
    }if(flag == false) {
       System.out.println("yes");
    } else {
       System.out.println("no");
    }
      

  2.   

    http://liugang594.javaeye.com/blog/454283
      

  3.   

    #define ISPOW2(x)   (x) & (x-1) ? false : true
      

  4.   


     public static void main(String[] args) {
         boolean flag=true;
         int i=89;
         char[] str=Integer.toBinaryString(i).toCharArray();
         System.out.println(str);
         for (int j = 1; j <str.length; j++) {
        
    if (str[j]=='1') {
    flag=false;
    break;
    }
    }
         if (flag) {
    System.out.println("yes");
    }else {
    System.out.println("no");
    }
        
        }
      

  5.   


      if(i%2=0){
         System.out.print("是");
       }
       else{System.out.print("不是");
       }
      

  6.   


    public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int value = 8;
    String valueString = Integer.toBinaryString(value);
    if(valueString.lastIndexOf('1')==0){
    System.out.println(value+"是2的"+(valueString.length()-1)+"次方");
    }

    }}这个试试,转换成二进制串后,判断只有第一位是1
      

  7.   

    如果int i     i&-i = i
    那么i就是2的n次方public boolean isPowerOf2(int i){reurn i&-i==i;
    }
      

  8.   

    刚刚测试好的一个方法 :
       public void judgeN2(int n){

    for(int i=0;i<=n;i++){
     if(Math.pow(2, i)==n){
     System.out.println("此数是2的n次方:");
     break;
     }
    if(i==n){
    System.out.println("此数不是是2的n次方:");

    }
    }
      

  9.   

    (number&(number-1))==0;   
      

  10.   

    1楼的方法有问题,循环里面的:value /= 2; 有什么作用呢?而且我验证了代码不可以判断。
    10楼的方法验证的是不是2的倍数,lz问的是“如何判断该数是不是2的n次方”。
      

  11.   


    if(!flag)就行了。
    i%2=0 应该是 i%2==0吧 写漏了一个"="
      

  12.   

    正则表达式解决,先转化为二进制字符串,然后把0去掉,看其是不是1个字符长度
    public static boolean method1(int num){

        return Integer.toBinaryString(num).replaceAll("0", "").length() == 1;
    }
      

  13.   

    Scanner scan = new Scanner(System.in); 
    int value = scan.nextInt(); 
    boolean flag = false; while(value != 0) { 
      
      if(value % 2 != 0) { 
          flag = true; 
          break; 
      } 
      value /= 2; 
    } if(flag == false) { 
      System.out.println("yes"); 
    } else { 
      System.out.println("no"); 
    }
      

  14.   

    经典解法:(x) & (x-1) ? false : true
      

  15.   

    sql--
    select (var)&(-var)=var;select 8&-8=8结果为1 是1就是偶数。不知道这样是否可行。
      

  16.   


    Scanner scan = new Scanner(System.in); 
    int value = scan.nextInt(); 
    boolean flag = false; while(value != 0) {   if(value % 2 != 0) { 
          flag = true; 
          break; 
      } 
      value /= 2; 
    } if(flag == false) { 
      System.out.println("yes"); 
    } else { 
      System.out.println("no");