POJ 2453二进制又一重要用法

#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <map>
using namespace std;
int main()
{
    int x,n;
    //char b[35];
    //itoa(x,b,2);
    while(cin>>n&&n)
    {
        x=n&-n;  //在树状数组用过,但是那时不解其意,现在有点点懂了,原来是补码问题
        cout<<(n+x+(n^n+x)/x/4)<<endl;  //但是这个式子确实很神,刚开始没想到用二进制的,受教了
        //cout<<(n^(n+x))<<endl;
    }
    return 0;
}

你可能感兴趣的:(POJ 2453二进制又一重要用法)