打表,i从小到大表达二次方,发现输入的
n
<
2
i
n < 2^i
n<2i时,输出结果为2^(i-1) -1
accode:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll maxn = 1e12 + 5;
ll a[50];
inline void init()
{
a[0] = 2;
ll c = 2, i;
for(i = 1; c < maxn; i++)
{
c *= 2;
a[i] = c;
}
}
int main()
{
init();
int T;
ll n;
scanf("%d", &T);
cout<<a[1]<<endl;
while(T--)
{
scanf("%lld", &n);
if(n == 1 || n == 2)
cout<<0<<endl;
else
{
for(int i = 0; i < 50; i++)
{
if(n <= a[i])
{
cout<<a[i-1]-1<<endl;
break;
}
}
}
}
return 0;
}