面试题。题目描述就是写一个函数,要求输入一个数,输出其二进制表示中1的个数。此处假设输入的为int型。
方法一:首先想到的就是位运算,用移位得出每一位是否为1。代码如下所示。
#include <iostream>
using namespace std;
int numberof1(int in)
{
int count = 0;
int input = in;
for(int i = 0; i < 32; i++)
{
if(1 == (input & 1))
count++;
input >>= 1;
}
return count;
}
int main()
{
int numbertocount;
cin>>numbertocount;
cout<<numberof1(numbertocount)<<endl;
return 0;
}
方法二:其次想到的是直接像数组一样取每一位的值,如此只要把所有的位相加起来,得出的值即为所求,其它代码不变,numberof1函数代码如下所示。
int numberof1(int in)
{
int count = 0;
char input[32];
itoa(in, input, 2);
for(int i = 0; i < strlen(input); i++)
{
count += input[i] - '0';
}
return count;
}
方法三:不直接取每一位的值,采用除以2取余数,余数相加即为所求,其它代码不变,numberof1函数代码如下所示。
int numberof1(int in)
{
int count = 0;
int input = in;
for(int i = 0; i < 32; i++)
{
count += input % 2;
input /= 2;
}
return count;
}
方法四:采用位运算变相得出1的个数,其它代码不变,numberof1函数代码如下所示。
int numberof1(int in)
{
int count = 0;
int input = in;
while(input)
{
count++;
input &= input - 1;
}
return count;
}
方法五:不使用循环,采用空间换取时间的策略,如32位机中int为32位,定义2的32次方大小的int型数组,其中每个元素存对应序号的二进制表示中1的个数。如此求输入值的二进制表示中1的个数就可以转化成查表的方式来进行,查表的优化可以采用索引。
分享到:
相关推荐
d行对应每个测试数据,把转换成的2进制数中哪一位是1的位数输出,按升序排列。 (比如说1101,它的第3位是1,第2位是1,第1位是0,第0位是1,所以输出 0 2 3) 输入样例: 1 13 输出样例: 0 2 3
二进制中 1 的个数请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。示例 1:输入:000000000000000000000000000010
汇编实现统计输入数据中1的个数,转换为二进制判断
对于两个非负整数x 和y,函数f(x,y) 定义为x 和y 在二进制表示时,其对应位不同的个数。例如,f(2,3)=1, f(0,3)=2, f(5,10)=4。 现在给出一组非负整数x 和y,计算f(x,y)的值。 Input 第一行:一个整数T (0 ),...
题目输入一个整数,输出该数32位二进制表示中1的个数(其中负数用补码表示)示例输入输出题解二进制移位法//将 mark0x01 和 n 进行 ‘&’ 运算//
15. 二进制中 1 的个数题目链接牛客网题目描述输入一个整数,输出该数二进制表示中 1 的个数。解题思路n&(n-1) 位运算可以将 n 的位级表示中最低的那
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。 思路 详见链接 代码 class Solution: def hammingWeight(self...
输入一个十进制整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解决思路 这是个位运算的题目。 解法一:可以通过按位与操作,通过将每一位和1与操作来求出1的个数。 解法二(最优解):一个巧妙的方法,...
5.8 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写一个程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来。 5.9 试编写一汇编语言程序,要求从键盘接收一个四位的...
(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。) 示例 1: 输入: L = 6, R = 10 输出: 4 解释: 6 -> 110 (2 个计算置位,2 是质数) 7 -> 111 (3 个计算...
> 输入一个整数,输出该数二进制表示中1的个数 对二进制的左移与右移,即对原数进行乘二除二操作,输出十进制 0b110 <> 1 # 6 -- 3 print(bin(3)) # 'ob11' 对十进制先转换为二进制进行左移与右移,即对原数进行...
从图像数据开始处,每个像素用1个二进制位表示。 从图片的底行开始,一行一行向上存储。 Windows规定图像文件中一个扫描行所占的字节数必须是4字节的倍数, 不足的位均以 0 填充。例如,图片宽度为45像素,实际上每...
# 让我们勇敢地面对光棍的身份吧,现在就证明自己:给你一个整数a,数出a在二进制表示下1的个数,并输出。 # 输入示例 # 输入:a = 7 # 输出示例 # 输出:3 # 解析 # 7的二进制是111,所以输出答案是3。这道题考的...
3.3请将下面各数用八进制和十六进制数表示: 2 3.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。 2 3.5字符常量和字符串常量有什么区别? 3 3.6写出以下程序运行的结果: 3 3.7...
:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。:给定单向链表的头指针和一个结点指针,定 义一个函数在O(1)时间删除该结点。:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表
说明:输入的第1个数表示学生人数(n=9),接着输入的9个成绩中,累加和为628.5(所有小数均保留一位小数输出),平均分为69.8分;平均分以上(A档)有4人,占44.4%,平均分以下(B档)有5人,占55.6%;A档的最低...
要求实现左右SHIFT任何一个键处于按下状态时输入字符为键 盘的上档字符或大写字母,否则输出数字或小写字母。 三、 进度计划 "序号 "设计内容 "完成时间 "备注 " "1 "比较字符串sample(学习) "2010.12.27 " " " ...
title: "[0603] 连续空余座位"题目描述几个朋友来到电影院的售票处,准备预约连续空余座位。注意:seat_id 字段是一个自增的整数,free 字段
特点 :将 a 和 b 转换为 二进制,按位比较,对应位置的数字,至少有一位为1的话,那么该为的整体结果就为1,否则为 0 ex : 5 | 3 101 011 ======== 111 结果为 :7 适用场合:任何小数与0 做 按位或的操作...
用十个数码表示——0、1、2、3、4、5、6、7、8、9 遵循"逢十进一"的规则 权展开式: D=Dn-1 · 10n-1+ Dn-2 · 10n-2+ · · ·+ D0 · 100+ D-1 · 10-1 + · · ·+ D-m · 10-m 十进制数是人们最习惯使用的数值,...