暑假代码小练题目一:判断一个数是不是2的幂次方
方法一:
将一个数字化为二进制形式,凡是2的幂次方的数:首位均为1,其余位为0;将该数减一变为首位为0,其余位均为1。所以只需判断 i &(i-1)是否为 0 即可。
(极妙!代码简单,但我感觉不太容易想出来…记它,哈哈哈)
bool judge(int i)
{
return (i&(i-1))==0;
}
int main()
{
cout << "请输入需要判断的数:";
int n;
cin >> n;
cout << judge(n);
cin.get();
cin.get();
return 0;
}
方法二:
将该数字一直除二,观察余数来判断
①若该数为1,则判断为2的幂次方
②当该数不是 1 时,一直除二,在商为 1 之前,若除 2 的余数不是 0 ,则判断不是2的幂次方;若除到最后余数均为 0 ,且最后商为 1 ,则判断是2的幂次方。
(这种方法简单易懂,但是代码相对来说比较复杂,不要忘记该数为 1 的特殊情况~)
#include<iostream>
using namespace std;
int judge(int i)
{
if (i==1)
return 1;
else
{
do
{
if (i%2==0)
i=i/2;
else
return 0;
}
while(i!=1);
return 1;
}
return 0;
}
int main()
{
int n;
cout << "请输入需要判断的数:";
cin >> n;
cout << judge(n);
cin.get();
cin.get();
return 0;
}
over~