您的位置:首页 > 其它

判断一个数是不是2的n次方

2007-12-03 15:42 288 查看
关于判断一个数N是不是2的n 次幂我想了两个办法:

方法一(即笨办法):

思路:将N用2去循环试除,一直除到1为止,如果出现除不尽的情况,就不是2的n次方。

代码:


#include<iostream>


using namespace std;


void main()


.{


long n;


while(1) //循环输入


. .{


cout<<"输入一个整数:";cin>>n;


while(abs(n)>1)




...{


long m;


m=n%2;


if(m==0)


n/=2;


else




...{


cout<<"no ";


break;


}


}


if(n==1)


cout<<"yes ";


else if(n==0)


cout<<"no ";


cout<<endl;


}


}

分析:这个方法又是除法,又是余数,效率太低了。

方法二:将N与(N-1)进行按位与运算,结果为0,则N 为2的n 次幂,否则不是。

代码:


#include<iostream>


using namespace std;


void main()




...{


long n;


while(1) //循环输入




...{


cout<<"输入一个整数:";cin>>n;


n=abs(n);


if(!(n & (n - 1)) & !!n )


cout<<"yes";


else cout<<"no";


cout<<endl;


}


}

分析:只用一个 !(n & (n - 1)) & !!n 作判断,效率高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: