题目
判断一个数是否为2的幂次方(如果存在一个整数x使n = 2^x,那么整数n是2的幂次方)
解题
方法1(对数法):
思路
对输入的数字num求以2为底的对数,若为整数则num为2的幂次方
代码
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double num,x; //以2为底的对数函数
cout<<"请输入一个数字:"<<endl;
cin>>num;
x = log(num)/log(2);
if((int)x==x){
cout<< num << "是2的幂次方" << endl;
}
else{
cout<< num << "不是2的幂次方" << endl;
}
return 0;
}
方法2(累除法):
思路
对输入的num循环除2,求其余数。若num为2的幂次方(如8),则所有余数均为0(即可被整除);若num不为2的幂次方(如18),则必有一个余数为1。通过判断余数中是否出现1来判断num是否为2的幂次方。
代码
#include<iostream>
using namespace std;
int main(){
int num,remain,x,flag = 0;
cout << "这是一个判断输入数字是否为2的指数倍的程序" <<endl;
cout << "请输入一个你要判断的整数:";
cin >> num;
x = num;
while (num > 1){
remain = num % 2;
num = num/2;
if (remain != 0){
cout<< x << "不是2的指数倍" << endl;
flag = 1;
break;
}
}
if (flag == 0){
cout<< x << "是2的指数倍" << endl;
}
}
输出结果