标签:
描述:
来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(0.00000000001s以内)按照他的规则比较地球人熟悉的两个十进制数字的大小,他比较的规则如下:
1、将要比较的两个数字分别转换成二进制数字;
2、计算两个二进制数字中1的个数,个数多的数字为两者中的大者;
3、负数按照其绝对值进行比较;
请利用地球人发明的计算机程序逼近都教授的特异功能,实现时可以有以下约束:
1、输入数据为范围在-32768到32768(地球人的十进制世界)之间的任意两个数字;
2、如果经过比较后2个数相等,输出为0,如果不相等,输出最大值。如果输入非法,输出-1。
样例输入: -30 20 样例输出: -30
分析:实际上本题就是一个统计二进制数中1的个数问题,有很多方法,这里给出一种高效的方法。
1 #include <stdio.h> 2 #include <math.h> 3 4 int one_count(unsigned int x) 5 { 6 int count = 0; 7 while (x){ 8 count++; 9 x = x & (x-1); 10 } 11 12 return count; 13 } 14 15 int main(void) 16 { 17 int num1, num2; 18 int cnt1, cnt2; 19 20 if (scanf("%d %d", &num1, &num2) == 2){ 21 cnt1 = one_count(abs(num1)); 22 cnt2 = one_count(abs(num2)); 23 24 if (cnt1 == cnt2) 25 printf("0\n"); 26 else 27 printf("%d\n", (cnt1 > cnt2) ? num1 : num2); 28 }else{ 29 printf("-1\n"); 30 } 31 32 return 0; 33 }
标签:
原文地址:http://www.cnblogs.com/xiaomanon/p/4468112.html