所以我希望这段代码能够计算2的次幂,但是直到我在控制台中输入奇数后,它才会停止,我的代码是否有任何修复?在此先多谢了
在此处输入代码:
#include <iostream>
using namespace std;
int main()
{
int a;
int counter=0;
cin >> a;
while(true){
cin >> a;
if(a%2==1)
break;
a/=2;
counter=counter+1;
}
cout << counter;
return 0;
}
答案 0 :(得分:4)
您缺少一些东西:
Soln:
如果数字n
是2的幂,则and
的{{1}}运算和
n
必须为0。在所有其他情况下,结果不是n - 1
。说,
0
使用此技术
n = 4 (in binary it is 100)
n - 1 = 3 (in binary it is 11)
n & (n - 1) = 0
100 (4)
& 011 (3)
-----------
000 (0)
答案 1 :(得分:0)
如果要评估所有输入为2的幂,我将使用double作为输入,以使那些指数小于零(0.5、0.25等)。
出于这个目的,由于双精度数是以双精度浮点格式表示的(如IEEE 754-2008标准所定义),因此您只应检查将数字用 std :: frexp (https://en.cppreference.com/w/cpp/numeric/math/frexp)等于0.5:
#include <cmath>
bool isPowerOfTwo(double a)
{
int exp;
return std::frexp(a, &exp) == 0.5;
}
然后输入代码:
#include <cmath>
#include <iostream>
bool isPowerOfTwo(double a)
{
int exp;
return std::frexp(a, &exp) == 0.5;
}
int main() {
unsigned counter = 0;
while (true) {
double input;
std::cin >> input;
if (!isPowerOfTwo(input)) {
break;
}
counter++;
}
std::cout << "Number of inputs power of 2: " << counter << std::endl;
return 0;
}