论坛首页 编程语言技术论坛

Java判断一个正整数是不是2的乘方

浏览 2839 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-09   最后修改:2009-02-09
C++

      这是在http://okruby.com/ruby-wenzhai/200901/27_551.html上面看到的一个题目,就写了一下。暂时就只想到这样做了,也许还有更好的算法。

 

import java.util.Scanner;

public class Test 
{
	public static void main(String[] args)
	{
		int temp = 1;

		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		
		while(true)
		{
			if(temp < n)
				temp<<=1;  //相当于temp = temp * 2;
			else if(temp > n)
			{
				System.out.println("该数不是2的乘方!");
				break;
			}
			else
			{
				System.out.println("该数是2的乘方!");
				break;
			}
		}
		
	}
}

 

   发表时间:2009-02-09  
 
   int number = 1;
    String string = Integer.toBinaryString(number);
    if (string.matches("10*")) {
      System.out.println("true");
    } else {
      System.out.println("false");
    }
0 请登录后投票
   发表时间:2009-02-09  
直接
if( n&(n-1)==0 ){
   return true;
}else{
   return false;
}
0 请登录后投票
   发表时间:2009-02-09  
ghostknight 写道

   int number = 1;
    String string = Integer.toBinaryString(number);
    if (string.matches("10*")) {
      System.out.println("true");
    } else {
      System.out.println("false");
    }

谢谢 这样很好 以前不知道Integer.toBinaryString(number) 没使用过 又长知识了。
0 请登录后投票
   发表时间:2009-02-09  
njuptsoz 写道

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

这样很好,不过应该这样写:if((n&(n-1))==0),也就是多一层括号。要不是你写出来,我就想不到这样做。
0 请登录后投票
   发表时间:2009-02-09  
yoyo08 写道

njuptsoz 写道
if( n&amp;(n-1)==0 ){
&nbsp;&nbsp; return true;
}else{
&nbsp;&nbsp; return false;
}

这样很好,不过应该这样写:if((n&amp;(n-1))==0),也就是多一层括号。要不是你写出来,我就想不到这样做。



不是我写的,是老紫竹写的
0 请登录后投票
   发表时间:2009-02-11  
这种技巧读一下《Hacker's Delight》会颇有收获。

话说楼主给的代码有个明显的死循环问题,不知道有没有注意过呢?可以试试所有大于0x40000000并小于0x80000000的整数试试。这是2的补码的特征来的~
0 请登录后投票
   发表时间:2009-02-11  
RednaxelaFX 写道

这种技巧读一下《Hacker's Delight》会颇有收获。 话说楼主给的代码有个明显的死循环问题,不知道有没有注意过呢?可以试试所有大于0x40000000并小于0x80000000的整数试试。这是2的补码的特征来的~

恩 现在发现了
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics