题目链接:点击打开链接
题意较简单,就是给你一个数 n ,然后1~n 的数最少需要多少下可以全部为0,减的数字任意;
从 1 开始往后手算,可以发现规律,1 需要减一下,2和3需要减两下,4,5,6,7需要减三下,8,9,10,11,12,13,14,15需要减四下,以此类推。规律便出来了。
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iomanip>
#include <cmath>
using namespace std;
typedef long long ll;
int main()
{
ll n;
while(cin>>n){
ll sum=0;
for(int i=1;i<=32;i++)
{
ll ss=1;
for(int j=1;j<i;j++) ss=ss*2;
sum+=ss;
//cout<<sum<<endl;
if(sum>=n&&sum-ss<n){
cout<<i<<endl;
break;
}
}
}
return 0;
}