计算机科学的基础之一是知道数字是如何在2的补码中表示的。假设你用32位写下了A和B之间的所有数字,包括2的补码表示。你总共会写下多少个1?
输入:第一行包含测试用例的数量T (<=1000)。接下来的T行中的每行都包含两个整数A和B。
输出:输出T行,每个测试用例对应一行。
约束:-2^31 <= A <= B <= 2^31 -1
示例输入:
-2 0
-3 4
-1 4示例输出:
63
99
37说明:对于第一种情况,-2包含31个1,后跟一个0,-1包含32个1,0包含0,因此总数为63。对于第二种情况,答案是31 + 31 + 32 +0+1+1+2+1= 99
发布于 2014-01-06 17:32:08
for (int i=1; i<line[0]; i++)
{
int numOf1s = 0;
for (int j=line[i].A; j<=line[i].B; j++)
{
for (unsigned int n=j; n>0; n>>=1)
numOf1s += n & 1;
}
printf("%d\n",numOf1s);
}https://stackoverflow.com/questions/20946558
复制相似问题