判断一个数是不是2的n次方
2007-12-03 15:42
357 查看
关于判断一个数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 作判断,效率高。
方法一(即笨办法):
思路:将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 作判断,效率高。
相关文章推荐
- c语言:判断一个整数是不是2的整数次方
- 判断一个整数是不是2的阶次方数
- c语言:判断一个整数是不是2的整数次方
- C++算法之 一句话判断一个整数是不是2 的整数次方
- 给你一个int型数,如 n, 判断它是不是2的多少次方,若是的,打印出来是多少次方?
- 小白笔记----------------判断一个数是不是某个数的次方
- 怎样知道一个数是不是2的N次方,怎样判断一个数是奇数还是偶数
- 判断一个数是不是2的n次方,幂指数--不使用循环
- 判断一个数字是不是2的整数次方
- 如何判断一个数是不是2的整数次方
- 判断一个数是不是3的n次方
- 判断一个数是不是2的N次方,很牛的算法#define ISPOW2(x) (x) & (x-1) ? false : true
- 用一条语句判断一个整数是不是2的整数次方
- LeetCode刷题: power of two (判断一个数是不是2的幂次方)
- 判断一个数是不是2的N次方 自己写的土算法
- 8,64,256都是2的阶次方数,用java编写程序来判断一个数是不是2的阶次方数
- 判断一个整数是不是2的阶次方数
- 写一个函数可以判断一个年份是不是闰年。
- 写一个函数判断year是不是闰年
- python判断一个数是不是完全平方数