先论lowbit



lowbit(int t)

{

return t&-t;

}

具体变化管他呢。。。反正就是能取从右往左第一个非0位置(记为k)的大小,那么2^k=lowbit(t);
则能求出某个数在二进制下末位有几个0,
用处:题目链接 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1222
 
#include<stdio.h>
#include<cmath>
long long x=0;
char c;
int sum=0;
long long suan(long long i)
{
    return i&(-i);
}
int main()
{ 
    while(~(c=getchar()))
    {
        if(c>='0'&&c<='9')
            x=x*10+c-'0';
        else if(c==' ')
        {
            if(x==0)
            {
                sum+=64;

            }
            else
                sum+=((int)log2(suan(x)));
            x=0;
        }

    }
    printf("%d\n",sum);
}
        


lowbit(int t){return t&-t}

你可能感兴趣的:(先论lowbit)