华为2013校园招聘上机笔试题-计算整数二进制表达式中0的个数

2013华为校园招聘机试题9月10日题

题目及参考解答来源:http://blog.csdn.net/caollcool/article/category/1234841

2.计算整数二进制表达式中0的个数,最左边1前面的0不考虑。

void GenZeroNum(int nVal, int& nZeroNum); 

#include <stdio.h>

void GenZeroNum(int nVal,int* nZeroNum)
{
    int inter,remainder;
    (*nZeroNum)=0;
    inter=nVal/2;
    remainder=nVal%2;
    while(inter)
    {
        if(remainder==0)
            (*nZeroNum)++;
        remainder=inter%2;
        inter=inter/2;
        
    }
}
void main()
{
    int nVal,nZeroNum,temp1;
    printf("请输入一个整数:");
    while ((temp1=scanf("%d",&nVal))==1)
    {
        GenZeroNum(nVal,&nZeroNum);
        printf("整数%d转换成二进制中0的个数为%d\n",nVal,nZeroNum);
        
        printf("\n\n请输入下一整数。输入其他字符结束输入!\n");
        temp1=scanf("%d",&nVal);
    }
}

思路:从位操作的角度讲,整数/2为二进制表示右移,整数%2则是获取二进制表示数末位数字。本例中,循环统计取余结果为0的次数。靠折半数非0的条件过滤最左边1前边的0。

可以考虑从纯位操作的角度求解。

posted on 2012-09-18 21:02  Raphael Lou  阅读(284)  评论(1编辑  收藏  举报

导航