Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!-C. Johnny and Another Rating Drop(思維,二進制)

題目鏈接

題意:

給你一個數字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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章