1的个数
来源:互联网 发布:3d照相机软件 编辑:程序博客网 时间:2024/06/07 11:26
1的个数
- 描述
- 小南刚学了二进制,他想知道一个数的二进制表示中有多少个1,你能帮他写一个程序来完成这个任务吗?
- 输入
- 第一行输入一个整数N,表示测试数据的组数(1<N<1000)
每组测试数据只有一行,是一个整数M(0=<M<=10000) - 输出
- 每组测试输出占一行,输出M的二进制表示中1的个数
- 样例输入
3467
- 样例输出
123
***************************************************************************************************************
我的代码:
#include "stdio.h"int main(){int N,M ;scanf("%d",&N);while(N--){scanf("%d",&M);int k=0;while(M!=0){if(M & 1){k++;}M=M>>1;}printf("%d\n",k);}return 0;}
分析:
这是一道很基本的考查位运算的面试题。包括微软在内的很多公司都曾采用过这道题。
一个很基本的想法是,我们先判断整数的最右边一位是不是1。接着把整数右移一位,原来处于右边第二位的数字现在被移到第一位了,再判断是不是1。这样每次移动一位,直到这个整数变成0为止。现在的问题变成怎样判断一个整数的最右边一位是不是1了。
很简单,如果它和整数1作位与运算(&)。由于1除了最右边一位以外,其他所有位都为0。因此如果位与运算的结果为1,表示整数的最右边一位是1,否则是0。
所以,如果写成函数的话,就是这种形式:
int NumberOf1_Solution1(int i)
{
int count = 0;
while(i)
{
if(i & 1)
count ++; i = i >> 1;
} return count;
}要注意,按位与(&)、按位或(|)、异或(^)
不要把它们弄混了~~~
0 0
- 1的个数
- 计算1的个数
- 1的个数
- 计算1的个数
- 7. “1”的个数
- “1”的个数
- 计算1的个数
- 1的个数
- 输出1的个数!!
- 1的个数
- 1的个数
- 统计1的个数
- 1的个数
- 计算"1"的个数
- 二进制1的个数
- 1的个数--蓝桥杯
- NYOJ - 1的个数
- 1的个数
- OpenGL ES2.0 – Iphone开发指引
- java读取txt文本中如含有中文,可能会出现乱码,解决方案
- js社交相关代码
- VC中拦截ESC消息
- linq.js - jQuery Plugin
- 1的个数
- 最短路径 简单的代码
- libusb+vc6.0环境下demo的编译环境搭建
- Ural FU Championship 2012
- 内核相关
- __doPostBack简单的使用方法
- android shape的使用
- 黑马程序员_线程阻塞问题
- ios证书申请