zoukankan      html  css  js  c++  java
  • hdu1196

    /*************************************************************************
    	>    File Name : hdu1196.c
    	>       Author : niwenxian AMS/ICT/CAS
    	>         Mail : niwenxianq@qq.com 
    	> Created Time : 2013年10月30日 星期三 11时50分37秒
    	>      Version :
    	>   Description:
     ************************************************************************/
     //
     //Lowest Bit
    //
    //Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    //Total Submission(s): 6642    Accepted Submission(s): 4866
    //
    //
    //Problem Description
    //Given an positive integer A (1 <= A <= 100), output the lowest bit of A.
    //
    //For example, given A = 26, we can write A in binary form as 11010, so the lowest bit of A is 10, so the output should be 2.
    //
    //Another example goes like this: given A = 88, we can write A in binary form as 1011000, so the lowest bit of A is 1000, so the output should be 8.
    // 
    //
    //Input
    //Each line of input contains only an integer A (1 <= A <= 100). A line containing "0" indicates the end of input, and this line is not a part of the input data.
    // 
    //
    //Output
    //For each A in the input, output a line containing only its lowest bit.
    // 
    //
    //Sample Input
    //26
    //88
    //0
    // 
    //
    //Sample Output
    //2
    //8
    // 
    //
    //Author
    //SHI, Xiaohan
    // 
    //
    //Source
    //Zhejiang University Local Contest 2005
    
    
    #include<stdio.h>
    #include<math.h>
    
    
    int main()
    {
        int a;
       // int low_bit;
        int count = 0;
        while(scanf("%d",&a)!=EOF&&a!=0)
        {
            //while(a%2 == 0)
            //{
            //    a /= 2;
            //    count++;
            //}
            //printf("%d
    ",1<<count);
            //count = 0;
          printf("%d
    ",((a^(a-1))+1)>>1);
    
    
        }
        return 0;
    }
    

    求最低位1,最基本的方法就是遍历了,从低到高判断,时间比较多



    说明:

    1. 较巧的方法:

    int a;

    (a^(a-1))  + 1 就是最低位的前一位的2次方,不过还要移一位


    2. 还有就是+的优先级比^的高


    3. a&(a-1)结果是把最低位的1清0了,每调用一次就清一个1

    这样,把最终结果再异或一次就是了

    a ^ (a & (a -1))


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    数据结构与算法分析-二叉堆
    数据结构与算法分析-AVL树
    数据结构与算法分析-二叉查找树
    优秀程序员应具备的15个特性
    2016年1月22日 收盘后美加的走势
    2016年1月8日 12月非农数据
    Replace into 与Insert into on duplicate key update的区别
    MYSQL视图的学习笔记
    postgresql创建用户
    连接postgresql数据库
  • 原文地址:https://www.cnblogs.com/vintion/p/4117036.html
Copyright © 2011-2022 走看看