題目鏈接
題意:
給你一個數字n,求1~n的數字相鄰兩位的二進制之間有多少位不同。
思路:
首先每加1,肯定會有至少一個位置不同,但有些情況會使得大於等於1的位置數字發生變化,經過分析,是碰到絕對偶數(2的次方倍)的情況時,不同的位置數就會+1,所以我們要求這個在小於等於n的情況下能夠放下多少絕對偶數。
代碼:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=5e5+5;
const int inf=0x3f3f3f3f;
signed main()
{
IOS;
int t;
cin>>t;
while(t--)
{
int n,num=0;
cin>>n;
while(n>0)
{
num+=n;
n/=2;
}
cout<<num<<endl;
}
return 0;
}