题目描述
给定一个正整数 N,问从 1 到 N,哪个整数可以被 2 整除次数最多。答案唯一。
所谓被 2 整除次数,以下为例:
- 6 可以被 2 整除 1 次:6→3
- 8 可以被 2 整除 3 次:8→4→2→1
- 3 可以被 2 整除 0 次
输入
输入一行,一个整数 N。
输出
输出一行,一个整数表示答案。
样例输入输出
样例输入 #1
7
样例输出 #1
4
样例输入 #2
32
样例输出 #2
32
样例输入 #3
1
样例输出 #3
1
样例输入 #4
100
样例输出 #4
64
数据范围
1≤N≤100
思路:
可按照题意模拟。
更简单的方法,答案为 ≤N 的最大的 2 的幂次。
#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int n,ma,mai=1;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x=i,s=0;
while(x%2==0){
x/=2;
s++;
}
if(ma<s){
mai=i;
ma=s;
}
}
cout<<mai;
return 0;
}