判断一个数是不是2的k次方

判断一个数字是不是2的k次方(这里不用考虑k的值)。
关于这个问题,要先从问题的本质入手:2的k次方的数字有哪些特点?
首先熟悉几个常见的(括号内是相应的二进制序列):

2(10) 4(100) 8(1000) 16(10000)

我们发现这些2的多少次方的数字呢,二进制序列都是只有唯一一个1的。
那么就从这里入手。介绍以下两个方法:

  1. 方法一

思路:将该数的二进制序列右移i位,直到遇到第一个1,然后判断这个数字是不是为1,如果为1的话,表示这个数的二进制序列只有一个1,即是2的次数。
代码实现:

package shujiazuoye;

import java.util.Scanner;

/*
* 如何判断一个数是不是2的几次方
* */
public class AboutTwo {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc=new Scanner(System.in);

        System.out.println("请输入你要判断的数字:");
        int num=sc.nextInt();
        aboutTwo(num);
    }
    private static void aboutTwo(int num) {
    
    

        while((num&1)!=1){
    
    
            num=num>>1;
        }
            if(num==1){
    
    
                System.out.println("是2的k次方");
            }else{
    
    
                System.out.println("不是2的k次方");
            }

    }
}

2.方法2

思路:
假设这个数字为n,如果n&(n-1)为0,则n为2的k次方;假设n&(n-1)为1,则n不是2的k次方。
代码实现:

package shujiazuoye;
import java.util.Scanner;

public class AboutTwo1 {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入要判断的数字:");
        int num=sc.nextInt();
        aboutTwo(num);

    }
    private static void aboutTwo(int num) {
    
    
        if(((num)&(num-1))==0){
    
    
            System.out.println("是2的k次方");
        }else{
    
    
            System.out.println("不是2的k次方");
        }
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_43815275/article/details/112442660
今日推荐