华为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) 编辑 收藏 举报