zoukankan      html  css  js  c++  java
  • 外星人比数的大小

    描述: 
    来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(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
    ");
    26         else
    27             printf("%d
    ", (cnt1 > cnt2) ? num1 : num2);
    28     }else{
    29         printf("-1
    ");
    30     }
    31 
    32     return 0;
    33 }
  • 相关阅读:
    安装LVS安装LVS和配置LVS的工作比较繁杂
    移动web开发研究
    10个顶级的CSS UI开源框架
    Jquery使用tbody编辑功能实现table输入计算功能
    【开源】Hawk-数据抓取工具:简明教程
    55个最实用大数据可视化分析工具
    Apache本地服务无法自启动问题解决
    网站10大致命SEO错误
    企业管理:名片的重要性
    开发人员应该知道的SEO
  • 原文地址:https://www.cnblogs.com/xiaomanon/p/4468112.html
Copyright © 2011-2022 走看看