关于不用任何判断语句的第二个小问题,也很有趣的。题目如下:请实现不用任何判断语句,不开方计算一个数是不是2的N次方。
这个问题比上个问题一开始感觉更麻烦,不过有了上一个问题答案的提示,很快就想到了用位运算来做,然后写出来了几个2的N次方的数看了一下规律,想到了以下的解决方法:
import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner in = new Scanner(System.in); System.out.println("Please Input two Integer:"); int a = in.nextInt(); String[] output = new String[2]; output[0]="是"; output[1]="不是"; a = a&(a-1); try{ System.out.println(output[a/a]); }catch (ArithmeticException e){ System.out.println(output[0]); } } }
因为一个2的N次方的数,其二进制一定是在第N+1位上有一个1,其他各位都是0,而再减1以后,则刚好按位取了反,与是按位与就可以得到0,而如果不是2的N次方,减1则不能得到其按位取反的数。你想到了吗?
不用任何判断语句,不开方计算一个数是不是2的N次方
最新推荐文章于 2023-06-03 11:36:02 发布