浏览 2839 次
锁定老帖子 主题:Java判断一个正整数是不是2的乘方
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-09
最后修改:2009-02-09
这是在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; } } } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-09
int number = 1; String string = Integer.toBinaryString(number); if (string.matches("10*")) { System.out.println("true"); } else { System.out.println("false"); } |
|
返回顶楼 | |
发表时间:2009-02-09
直接
if( n&(n-1)==0 ){ return true; }else{ return false; } |
|
返回顶楼 | |
发表时间: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) 没使用过 又长知识了。 |
|
返回顶楼 | |
发表时间:2009-02-09
njuptsoz 写道 if( n&(n-1)==0 ){ return true; }else{ return false; } 这样很好,不过应该这样写:if((n&(n-1))==0),也就是多一层括号。要不是你写出来,我就想不到这样做。 |
|
返回顶楼 | |
发表时间:2009-02-09
yoyo08 写道 njuptsoz 写道 if( n&(n-1)==0 ){ return true; }else{ return false; } 这样很好,不过应该这样写:if((n&(n-1))==0),也就是多一层括号。要不是你写出来,我就想不到这样做。 不是我写的,是老紫竹写的 ![]() |
|
返回顶楼 | |
发表时间:2009-02-11
这种技巧读一下《Hacker's Delight》会颇有收获。
话说楼主给的代码有个明显的死循环问题,不知道有没有注意过呢?可以试试所有大于0x40000000并小于0x80000000的整数试试。这是2的补码的特征来的~ |
|
返回顶楼 | |
发表时间:2009-02-11
RednaxelaFX 写道 这种技巧读一下《Hacker's Delight》会颇有收获。 话说楼主给的代码有个明显的死循环问题,不知道有没有注意过呢?可以试试所有大于0x40000000并小于0x80000000的整数试试。这是2的补码的特征来的~ 恩 现在发现了 |
|
返回顶楼 | |