hdu5747

来源:互联网 发布:loadrunner12 java 编辑:程序博客网 时间:2024/06/05 00:32

hdu5747

这个题可以想到二进制上,如果m+1>=二进制位数,那么就是二进制各位的和,

如果m+1<二进制位数,那么把前面的加到最高位就可以了。。。

#include <iostream>#include <stdio.h>#include<math.h>using namespace std;int x;int data[30];int main(){    int n,p,q;    while(~scanf("%d",&n))    {        while(n--)        {            scanf("%d %d",&p,&q);            int i=0;            int s=0;            while(p!=0)            {                data[i]=p%2;                p=p/2;                s+=data[i];                i++;            }            if(i<=q+1) printf("%d\n",s);            else if(i>q+1)            {                for(int j=i-1;j>=q+1;j--)                {                    s-=data[j];                    if(data[j]==1)                       s+=pow(2,j-q);                }                printf("%d\n",s);            }        }    }    return 0;}


0 0
原创粉丝点击