数字后面的最高幂为 2
highest power of 2 behind a number
我正在编写一个代码来给出一行中的数字,输入以零结束,然后使用最大功率 2 小于或等于一行中的输入。 它不起作用。
#include<iostream>
#include<stdio.h>
using namespace std;
int highestPowerof2( int n)
{
static int result = 0;
for (static int i=n; i>=1; i--)
{
if ((i & (i-1)) == 0)
{
result = i;
break;
}
}
return result;
}
int main() {
static int num ;
do{
cin>>num ;
}
while(num=!0);
cout<<highestPowerof2(num)<<"n";
return 0;
}
代码中最令人惊讶的是:
do{
cin>>num ;
}
while(num=!0);
您不断读取用户输入的num
,直到num == 0
。我不得不承认,我并不真正理解您的其余代码,但是对于num == 0
调用函数highestPowerof2(num)
总是会导致0
。
也许您想重复该程序,直到用户决定退出,这可能是
do{
cin>>num ;
cout<<highestPowerof2(num)<<"n";
} while(num=!0);
PS:另一个"令人惊讶"的事情是,您在没有真正意义的地方使用static
。最好简单地删除它。
这是另一种对于大型n
来说速度稍快的方法。例如,如果n = 2^31 - 1
,则原始循环需要迭代 2^30 - 1 = 1,073,741,823 次,而此循环只需要一次迭代(sizeof(int) == 4
提供(:
#include <iostream>
#include <stdio.h>
using namespace std;
int highestPowerof2( int n)
{
if (n < 0) return 0;
int result = 0;
int num_bits = sizeof(int) * 8;
unsigned int i = 1 << (num_bits - 1);
while(i > 0) {
if (n >= i) return i;
i >>= 1;
}
return 0;
}
int main() {
int num ;
while (1) {
cin >> num;
cout << highestPowerof2(num) << "n";
if (num == 0) break;
}
return 0;
}
相关文章:
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 查找数字是否为 2 的幂的时间复杂度
- 数字后面的最高幂为 2
- C++在不使用pow或循环的情况下计算一个数字的幂
- 使用用户定义的函数查找数字的幂时出现问题
- C++ : 如何计算提高到大幂的数字的模数?
- 快速实现以找到数字的 2 的前面的幂
- 在 C/C++ 中乘以低数字(相对于高数字)是否更快?
- 如何计算在重复数字之前 x 必须在 (x * y) % z 中有多高
- 使用幂函数的计算给出了大数字的错误答案
- 在Windows 10中,将Clocks_per_sec重新定义为更高的数字
- 三个数字之间的 C++ 相加两个更高的数字,没有循环和数组
- 如何在较高和较低数字的阵列中适应搜索算法(3N / 2)-2
- 更好的算法来检查一个数字是否既不是素数也不是单个素数的幂
- 快速获取接近2次幂的数字(浮点)
- 我怎样才能从 n 得到一个提高到自身等于 n 的幂的数字?
- 为什么将高数字传递给递归功能会使我的控制台停止响应
- C++余数以较高的数字返回 7
- 具有一个零位的下一个更高的数字
- 将整数提升为高幂