031 二进制1的数量(keep it up, 看到这个问题,刚开始有点蒙)
2015-08-11 08:58
337 查看
剑指offer在标题中:http://ac.jobdu.com/problem.php?pid=1513
题目描写叙述:
输入一个整数,输出该数二进制表示中1的个数。当中负数用补码表示。
输入:
输入可能包括多个測试例子。
对于每一个输入文件,第一行输入一个整数T。代表測试例子的数量。对于每一个測试例子输入为一个整数。
。n保证是int范围内的一个整数。
输出:
相应每一个測试案例。
输出一个整数,代表输入的那个数中1的个数。
例子输入:
例子输出:
计算机中的正负数都用补码表示,知道这点这题就简单了,由于刚開始还在想怎么把负数的补码求出来。
。
。汗!
代码:
题目描写叙述:
输入一个整数,输出该数二进制表示中1的个数。当中负数用补码表示。
输入:
输入可能包括多个測试例子。
对于每一个输入文件,第一行输入一个整数T。代表測试例子的数量。对于每一个測试例子输入为一个整数。
。n保证是int范围内的一个整数。
输出:
相应每一个測试案例。
输出一个整数,代表输入的那个数中1的个数。
例子输入:
3 4 5 -1
例子输出:
1 2 32
正数的原码,补码,反码都同样,都等于它本身 负数的补码是:符号位为1,其余各位求反,末位加1 反码是:符号位为1,其余各位求反,但末位不加1 也就是说,反码末位加上1就是补码 -1011 原码:11011 反码:10100 //负数时,反码为原码取反 补码:10101 //负数时。补码为原码取反+1 移码:00101 //原数+10000
计算机中的正负数都用补码表示,知道这点这题就简单了,由于刚開始还在想怎么把负数的补码求出来。
。
。汗!
代码:
#include <stdio.h> #include <stdlib.h> int getCount1(int vNumber) { int i = 32; int Count = 0; while (i--) { if (vNumber & 0x00000001) ++Count; vNumber >>= 1; } return Count; } int main() { int N; int Number; scanf("%d", &N); while (N--) { scanf("%d", &Number); printf("%d\n", getCount1(Number)); } //system("pause"); return 0; } /************************************************************** Problem: 1513 User: Language: C Result: Accepted Time:80 ms Memory:912 kb ****************************************************************/
相关文章推荐
- 查询公司的DUNS 邓白氏编码
- PHP基础----02常量与变量
- LeetCode(153) Find Minimum in Rotated Sorted Array
- SketchUp Pro 简单而功能强大的设计工具
- 有关动画的code(2中 以后慢慢添加)
- jQuery的remove()方法使用详解
- 导演、场景、层、精灵
- PHP基础----01PHP标记符
- HDU 3530 Subsequence
- 解决 FusionCharts3.2.1 首页无法载入的问题
- FusionCharts3.2.1 参数的详细说明和功能特性
- C++ Primer 第(1-3)章一句话知识点总结
- 基于CXF WebService(4)高级属性之Invoker
- 架构师速成-有关架构的思考
- FusionCharts 3.2.1 常用用法
- JS 实现中英文逗号的替换
- 关于Unicode字符集
- excel数据透视表列名更改
- 对Yii 2.0模型rules的理解(load()无法正确装载数据)
- 右键新建没有Word_Excel_PowerPoint的解决方法