码迷,mamicode.com
首页 > 其他好文 > 详细

外星人比数的大小

时间:2015-04-30 10:17:17      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

描述: 
来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!