题目描述
Takahashi loves numbers divisible by 2.
You are given a positive integer N. Among the integers between 1 and N (inclusive), find the one that can be divisible by 2 for the most number of times. The solution is always unique.
Here, the number of times an integer can be divisible by 2, is how many times the integer can be divided by 2 without remainder.
For example,
6 can be divided by 2 once: 6 -> 3.
8 can be divided by 2 three times: 8 -> 4 -> 2 -> 1.
3 can be divided by 2 zero times.
Constraints
1≤N≤100
You are given a positive integer N. Among the integers between 1 and N (inclusive), find the one that can be divisible by 2 for the most number of times. The solution is always unique.
Here, the number of times an integer can be divisible by 2, is how many times the integer can be divided by 2 without remainder.
For example,
6 can be divided by 2 once: 6 -> 3.
8 can be divided by 2 three times: 8 -> 4 -> 2 -> 1.
3 can be divided by 2 zero times.
Constraints
1≤N≤100
输入
Input is given from Standard Input in the following format:
N
N
输出
Print the answer.
样例输入
7
样例输出
4
分析:这题之前理解错题意WA了好几发(辣鸡队友瞎说题意),其实就是找n以内的最大2的平方数。


#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <queue> #define range(i,a,b) for(int i=a;i<=b;++i) #define rerange(i,a,b) for(int i=a;i>=b;--i) #define fill(arr,tmp) memset(arr,tmp,sizeof(arr)) using namespace std; int n,ans,acnt; void init(){ cin>>n; } void solve(){ while(n){ ++ans; n>>=1; } cout<<(1<<(ans-1))<<endl; } int main() { init(); solve(); return 0; }
本文介绍了一道算法题目,任务是在1到N之间找到能被2整除最多次数的整数。通过位操作实现高效求解,并给出了完整的C++代码实现。
487

被折叠的 条评论
为什么被折叠?



