JD 1513:二进制中1的个数

来源:互联网 发布:免费手机拍证件照软件 编辑:程序博客网 时间:2024/06/06 17:31
题目描述:

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

输入:

输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
。n保证是int范围内的一个整数。

输出:

对应每个测试案例,
输出一个整数,代表输入的那个数中1的个数。

样例输入:
345-1
样例输出:
1232
本题正负都有
代码如下:
#include <iostream>#include <string>#include <string.h>#include <map>#include <stdio.h>#include <algorithm>#include <queue>#include <vector>#include <math.h>#include <set>#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))#define SWAP(a , b){ int temp = a; a = b; b = temp;}using namespace std;int main(){   int n,k;    cin >> n;    while(n--)    {        scanf("%d",&k);        int num = 0;        /*while(k)//正负皆可        {            k &= (k - 1);            num++;        }*/        /*while(k)//只适用于正数        {            if(k%2 == 1) num++;            k = k/2;        }*/        while(k)//只适用于正数        {            num += k&0x01;            k >>= 1;        }        printf("%d\n",num);    }    return 0;}

扩展问题:
给二进制表示的两个数A,B,将A变成B,至少需要改变多少位?
0 0
原创粉丝点击