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))


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    IIS主机托管的FSO设置用户权限问题
    关于使用UTF8开发ASP网站
    构建Android开发环境
    iOS如何取得APP的版本信息跟服务器对比进行升级提示?
    经典讲解VB.NET线程方法之访问数据库
    IIS7.0下ASP+Access(MDB)应用环境设置要点
    一文明白数据库事务隔离级别
    EA鼻祖,Zachman,6 行(视点)+ 6 列(W5H)+ 6 条规则
    C语言位运算详解
    关于while 和if
  • 原文地址:https://www.cnblogs.com/vintion/p/4117036.html
Copyright © 2011-2022 走看看