如何判断一个数是2的N次方?小鸟寻求高手帮组 如何判断一个数是2的N次方?小鸟寻求高手帮组~~!!我是个初学者 大家帮忙下。。3Q~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $a = 122;for($i=2;$i<=$a;$i=$i*2){if ($a==$i) echo "yes"; } (0,1自己判断一下就可以了 ,这种写法可以提高鉴别效率,减少时间。时间复杂度应该是:log(n))int n = 122;int iTemp = n;boolean bFlg = true;for (int i = 1; i <= n / 2; i*2){ if (iTemp%2 == 1) { bFlg = false; break; } else { iTemp = iTemp / 2; }}你试试吧 if( n & (n-1) ==0 )return true;return false; (i & (i - 1)) == 0 import java.util.*;public class PanDuan { public static double JiSuan(double n) { double x; x = n/2; if(x>=3) x = JiSuan(x); return (x); } public static void main(String[] args) { double m,y; System.out.println("请输入所需判断的数字:"); Scanner reader = new Scanner(System.in); m = reader.nextDouble(); if(m == 2) System.out.println("该数是2的n次方"); else { y = JiSuan(m); if(y == 2) System.out.println("该数是2的n次方"); else System.out.println("该数不是2的n次方"); } }} i是什么类型的,怎具体怎么写啊?我用scanner写怎么都不对啊? 4楼正解。正整数都成立。short、int、long类型都可以。 //N是负数的情况我没考虑public static boolean check(int n){ boolean flag = false; int i = 2; if((i >> 1) == n){ flag = true; }else{ while(i <= n){ if(i == n){ flag = true; break; } i = i << 1; } } return flag; } /** * [简要说明] 判断一个数是否是2的n次幂 * [详细说明] 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false * @param num * @return */ public boolean judgePower (int num) { if (num%2 == 0 && num != 0) { return true; } return false; } /** * [简要说明] 判断一个数是否是2的n次幂 * [详细说明] 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false * @param num * @return */ public boolean judgePower (int num) { if (num%2 == 0 && num != 0) { return true; } return false; } 谢谢大家的帮助 对我很有用3Q3Q3Q3Q3Q~~~ /** * 找不到最快的最好的,我是这样做的 [简要说明] 判断一个数是否是2的n次幂 [详细说明] * 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false * * @param num * @return */ public boolean judgePower(int num) { if (num < 1) return false; while (num > 2) { if (num % 2 == 1) return false; else num = num / 2; } return true; } public void testNegative(){ assertFalse(judgePower(-1)); } public void testZero(){ assertFalse(judgePower(0)); } public void testTrue(){ assertTrue(judgePower(1)); assertTrue(judgePower(2)); assertTrue(judgePower(4)); assertTrue(judgePower(8)); assertTrue(judgePower(16)); assertTrue(judgePower(32)); } public void testF(){ assertFalse(judgePower(3)); assertFalse(judgePower(5)); assertFalse(judgePower(6)); assertFalse(judgePower(7)); assertFalse(judgePower(9)); assertFalse(judgePower(10)); } 1)由于2的N次方的数二进制表示是第1位为1,其余为0,而x-1(假如x为2的N次方)得到的数的二进制表示恰恰是第1位为0,其余为1,两者相与,得到的结果就为0,否则结果肯定不为0。2)代码: return ((num & (num - 1)) == 0) ? true : false; 求高手点拨:开发因特网“星形结构聊天工具”所涉技术书籍。 新手求教:求1/2+2/3+3/5+5/8+8/13......的前十项之和,我的程序如下,请问错误出在哪里? 关于java与SQL Server 2000连接问题 急!美萍里的JTabel是怎么做的 Justep 谁了解?这个东西好么?做物流网站行么? 用java开发桌面应用软件 去掉字符串中的空格的一个问题? 数据库打包 如何取得当前日期的年、月、日三个变量 突然脑筋短路,一个关于类的方法的问题,请兄弟们指点。 花几分钟帮忙一个SWING的JOptionPane问题。 标记上具有语法错误,错误放置了构造
for($i=2;$i<=$a;$i=$i*2)
{
if ($a==$i) echo "yes";
}
int n = 122;
int iTemp = n;
boolean bFlg = true;
for (int i = 1; i <= n / 2; i*2){
if (iTemp%2 == 1) {
bFlg = false;
break;
} else {
iTemp = iTemp / 2;
}
}
你试试吧
return false;
public class PanDuan {
public static double JiSuan(double n)
{
double x;
x = n/2;
if(x>=3)
x = JiSuan(x);
return (x);
}
public static void main(String[] args)
{
double m,y;
System.out.println("请输入所需判断的数字:");
Scanner reader = new Scanner(System.in);
m = reader.nextDouble();
if(m == 2)
System.out.println("该数是2的n次方");
else
{
y = JiSuan(m);
if(y == 2)
System.out.println("该数是2的n次方");
else
System.out.println("该数不是2的n次方");
}
}
}
i是什么类型的,怎具体怎么写啊?我用scanner写怎么都不对啊?
正整数都成立。short、int、long类型都可以。
//N是负数的情况我没考虑
public static boolean check(int n){
boolean flag = false;
int i = 2;
if((i >> 1) == n){
flag = true;
}else{
while(i <= n){
if(i == n){
flag = true;
break;
}
i = i << 1;
}
}
return flag;
}
* [简要说明] 判断一个数是否是2的n次幂
* [详细说明] 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false
* @param num
* @return
*/
public boolean judgePower (int num)
{
if (num%2 == 0 && num != 0)
{
return true;
}
return false;
}
/**
* [简要说明] 判断一个数是否是2的n次幂
* [详细说明] 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false
* @param num
* @return
*/
public boolean judgePower (int num)
{
if (num%2 == 0 && num != 0)
{
return true;
}
return false;
}
* 找不到最快的最好的,我是这样做的 [简要说明] 判断一个数是否是2的n次幂 [详细说明]
* 判断一个数是否是2的n次幂,如果是返回ture,如果不是返回false
*
* @param num
* @return
*/
public boolean judgePower(int num) {
if (num < 1)
return false;
while (num > 2) {
if (num % 2 == 1)
return false;
else
num = num / 2;
}
return true;
}
public void testNegative(){
assertFalse(judgePower(-1));
}
public void testZero(){
assertFalse(judgePower(0));
} public void testTrue(){
assertTrue(judgePower(1));
assertTrue(judgePower(2));
assertTrue(judgePower(4));
assertTrue(judgePower(8));
assertTrue(judgePower(16));
assertTrue(judgePower(32));
}
public void testF(){
assertFalse(judgePower(3));
assertFalse(judgePower(5));
assertFalse(judgePower(6));
assertFalse(judgePower(7));
assertFalse(judgePower(9));
assertFalse(judgePower(10));
}
2)代码:
return ((num & (num - 1)) == 0) ? true : false;