Problem 1130 - 比较大小
/*
Time Limit: 1000MS Memory Limit: 65536KB
Difficulty:
Total
Submit: 591 Accepted: 206 Special Judge: No Description
输入两个十进制整数A,B,请判断它们的大小关系。
我们重新定义两个数的大小比较规则为:谁的二进制表示中含1的个数多谁大,若含1的个数相等,则按普通的大小关系进行比较。
Input第一行:一个整数T,表示测试数据组数。
接下来共T行,每行两个整数A,B。(A,B在int范围内)Output每组测试数据输出一行,即A,B的大小关系。
Sample
Input
3
3 4
10 10
5 9
Sample
Output
>
=
<
*/
核心算法就是计算二进制中1的个数,基本算法就是做右移,然后记录1的个数,直到n为0为止。这里采用另一种算法解此题。
1 #include<stdio.h> 2 int Bit(int n) //快速法计算二进制中1的个数 3 { 4 int c; 5 for(c=0;n;c++) 6 n&=(n-1); 7 return c; 8 } 9 int main() 10 { 11 int T,a,b,x,y; 12 scanf("%d",&T); 13 while(T--) 14 { 15 scanf("%d%d",&a,&b); 16 x=Bit(a); 17 y=Bit(b); 18 if(x>y) printf(">\n"); 19 else if(x<y) printf("<\n"); 20 else 21 { 22 if(a<b) printf("<\n"); 23 else if(a>b) printf(">\n"); 24 else printf("=\n"); 25 } 26 } 27 return 0; 28 }