判断一个整数不是2的阶次方树

如果是一个2的阶次方,那么它的二进制数的首位一般是1,后面接若干个0。比如8就是1000,64是100 0000。 如果将这个数减1后,再与该数做和&运算,则改全为0.

package cn.usst.DataTest;

import java.io.*;

/**
 * 从键盘输入一个值
 */
public class InputData {
	static private String s = "";

	static public void input() {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		try {
			s = br.readLine();
		} catch (IOException e) {
			throw new IllegalArgumentException();
		}
	}

	static public int getInt(){
		input();
		return Integer.parseInt(s);
	}
}
package cn.usst.DataTest;

/**
 * 判断一个整数不是2的阶次方树
 * @author G-Xia
 *
 */
public class Result {
	void print(int d){
		if (((d-1)&d) == 0 && (d !=0 )){
			System.out.println("是2的阶次方");
		}else{
			System.out.println("不是2的阶次方");
		}
	}
}
package cn.usst.DataTest;

public class DateTest {
	public static void main(String[] args) {
		Result result = new Result();
		System.out.println("please input integer:");
		int a = InputData.getInt();
		result.print(a);
	}
}
时间: 2024-08-02 07:00:35

判断一个整数不是2的阶次方树的相关文章

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

参考:http://bbs.csdn.net/topics/370058619 如题,如何判断一个整数是否是2的N次方,我能想到的方法有两个 1.一直除2,看最后是否等于1.(最笨的方法) 2.转换成2进制,看是否是这个样子的:1,10,100,1000,10000,就是除了最高位是1,其他都是0,或者说只有一个1. 3.当我还在为我能想到第二个方法而沾沾自喜的时候,我看到了下面这种更巧妙的方法 以4(100) 7(0111) 8(1000)为例 4 & 3 --> 100 & 01

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

我的思路很简单,就是这样: bool check(int n) { while (n != 2) { if (n % 2 != 0) { return false; } n /= 2; } return true; } bool isPowerOfTwo(int n) { if (n == 0){ return false; } if (n == 1){ return true; } return check(n); } 因为我都是自学,所以算法啥的我觉得这肯定不是最快的方法,果然我在另外一些博

c语言:判断一个整数是不是2的整数次方

判断一个整数是不是2的整数次方. 解:程序: #include<stdio.h> int count(int t) { int count=0; while (t) { count++; t=t&(t-1); } return count; } int main() { int num,ret=0; printf("请输入一个整数:"); scanf("%d", &num); ret = count(num); if (ret == 1)

判断一个整数是否为另一个整数的幂数

   最近在学习微软推出的虚拟课程中关于网络上最火的20个关于c#的问题,写下关于对于这个问题的个人理解和解决思路,请各位看官笑纳. 题目为:(原)判断一个数字是否2的幂数? 这是我个人还没看正确答案前自己的解决思路(一个小控制台程序),代码如下: static void Main(string[] args) { for (int increment = 0; increment < 100000; increment++) { if (IsPower(increment)) { Consol

经典算法之判断一个整数是否为素数

经典算法之判断一个整数是否为素数 1 /** 2 判断一个数是否为素数 如: 3 输入: 任意一个数 12 4 输出: 1或0(1表示为素数) 0 5 */ 6 /**************被称为笨蛋的做法************/ 7 #include <stdio.h> 8 9 int main() 10 { 11 12 int i,n; //i为计数数,n为存储用户输入的数 13 14 do //循环检测用户输入的数据>0为合法 15 scanf("%d",&

判断一个整数是否是平方数

367. Valid Perfect Square 题意:不用api,判断一个整数是否是平方数. 开始的想法是直接用二分法判断是否是平方数. 错误的代码: 1 public boolean isPerfectSquare(int num) { 2 // binary search 3 int i=0; 4 int n=num; 5 while(i<=n){ 6 int mid=i+(n-i)/2; 7 int square=mid*mid; 8 if(square==num) return tr

判断一个整数是否为回文数 Check if a number is palindrome

一种方法是先翻转当前数,然后把它和原数比较(略) 另一种是递归方法,借用一个复制数,对原数递归,使之翻转,然后配合复制数比较 package recursion; public class Check_if_a_number_is_palindrome { public static void main(String[] args) { int num = 121321; System.out.println(check(num)); num = 12321; System.out.printl

在10000以内判断一个整数,它加上100和加上268后都是一个完全平方数 3 提问:请问该数是多少?

1 ''' 2 在10000以内判断一个整数,它加上100和加上268后都是一个完全平方数 3 提问:请问该数是多少? 4 ''' 5 import math 6 for i in range(10000): 7 m = math.sqrt(i + 100) 8 n = math.sqrt(i + 268) 9 if m * m == i + 100 and n * n == i + 268: 10 print(i) 原文地址:https://www.cnblogs.com/JerryZao/p

判断一个整数是否为素数(质数)

//判断一个整数是否为素数(质数)//质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数#include <stdio.h>int main(){ int n, i, flag = 0; printf("请输入一个正整数:"); scanf("%d", &n); for (i = 2; i <= n / 2; ++i) { //如果满足以下的条件,他就不是素数 if (n%i == 0) { flag = 1;