博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
阅读量:5873 次
发布时间:2019-06-19

本文共 482 字,大约阅读时间需要 1 分钟。

hot3.png

题目:

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

题目引自。

算法分析:

    第一眼看见题目的时候,最初的想法是对输入的整数对2取余,如果其结果为1就统计。但是这种做法会造成负数的统计不准确。

    第二种方案,利用C语言的位运算,对整数的二进制中出现的1的个数进行统计。其统计的方法就是整数与数字“1”进行与运算(&)。低位到高位循环,与运算,左进一位。

算法实现:

 

int Count(int i) { int count = 0;  unsigned int flag = 1;  while(flag){ if(i & flag)  count ++;  flag = flag << 1;  }  return count; }

 测试代码:

int main(void){  	int num;  	while(scanf("%d",&num))  	printf("%d\n",Count(num));  	return 0;  }

测试结果:

 

转载于:https://my.oschina.net/ithaibo/blog/142655

你可能感兴趣的文章
PHP - 如何打印函数调用树
查看>>
js闭包
查看>>
寒假。3.3.G - Common Child (最大公共子序)
查看>>
设计模式学习笔记--原型模式
查看>>
.Net 通过MySQLDriverCS操作MySQL
查看>>
JS Cookie
查看>>
ubuntu Unable to locate package sysv-rc-conf
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
MacBook如何用Parallels Desktop安装windows7/8
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
七天学会ASP.NET MVC (四)——用户授权认证问题
查看>>
upgrade to iOS7,how to remove stroyboard?
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
zabbix监控部署
查看>>
关于Tomcat下项目中文名在Windows和Linux下编码混乱问题解决
查看>>
struts中的xwork源码下载地址
查看>>