求出整数中1的个数

输入一个整数,求出它的二进制1的个数。考虑的知识点:负数怎么求,因为计算机中存放都是补码的形式存储一个数。因为正数的源码,反码,补码都是一样,不用考虑。但是负数就要考虑了,比如-0,它的源码应该是10000000 00000000 00000000 000000000 00000000,所以负数要考虑。

下面是代码实现:

#ifndef _FINDNUMBEROF1_
#define _FINDNUMBEROF1_

/*================================ Macros ===================================*/
#define FALSE 0
#define TURE 1

/*================================ Function ===================================*/
int findNumberOf1(int num);

#endif //_FINDNUMBEROF1_

 
/***********************************************************/
/*32位平台*/
/*函数名:findNumberOf1*/
/*函数口参数:要求1的整数*/
/*函数返回值:返回1的个数或错误码*/
/*函数功能:求输入整数中二进制1的个数*/
/***********************************************************/
int findNumberOf1(int num)
{
        int retValue = 0;
		if(-0 == num)  
		{
			return 1;
		}
		else if(num >= 0)
		{
			while(num)
			{
				if(1 == (num&1))
				{
					retValue++;
				}
				num >>= 1;
			}
		}
		else
		{
			num = (~num+1);//负数以补码的方式存储,所以求源码
			while(num)
			{
				if(1 == (num&1))
				{
					retValue++;
				}
				num >>= 1;
			}
			retValue += 1;//加符号位
		}
        return retValue;
}

#include<stdio.h>
#include"findNumberOf1.h"
static int inputNumber(int *number)
{
	if(NULL == number)
	{
		return FALSE;
	}
	printf("请输入整数:");
	scanf("%d",number);
	if((number < -2147483648)&&(number>2147483647))
	{
		printf("输入的数超出范围\n");
		return FALSE;
	}
}
/***********************************************************/
/*32位平台*/
/*函数名:main*/
/*函数口参数:无*/
/*函数返回值:0*/
/*函数功能:程序空*/
/***********************************************************/
int main()
{
	int number = 0;
	int returnValue = 0;
	inputNumber(&number);
	returnValue = findNumberOf1(number);
	printf("%d",returnValue);
	printf("\n");
	system("pause");
	return 0;
}
时间: 2024-12-26 09:17:00

求出整数中1的个数的相关文章

08-1. 求一批整数中出现最多的个位数字(20)

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字.例如给定3个整数1234.2345.3456,其中出现最多次数的数字是3和4,均出现了3次. 输入格式: 输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔. 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1.n2.……为出现次数最多的个位数字,按从小到大的顺序排列.数字间以空格分隔,但末尾不得有多余空格. 输入样例: 3 1234 2345 3

数组-07. 求一批整数中出现最多的个位数字

数组-07. 求一批整数中出现最多的个位数字(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 徐镜春(浙江大学) 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字.例如给定3个整数1234.2345.3456,其中出现最多次数的数字是3和4,均出现了3次. 输入格式: 输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔. 输出格式: 在一行中按格式“M:

整数中1 的个数

问题 求整数中1的个数 原理 一个数n若不为0,从数的最低为到最高位,第一个为1 的位记为 i ,则减去 1 之后,改为变为0,i 右边的所有位都变为1,因此 n & (n-1)可得 n中剩余比 i 更高位序 的 部分 ,循环此操作,则可得 1 的计数. 代码 1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int n,s,counter = 0; 7 cout << " Plea

判欧拉回路或求一个图中欧拉图的个数

判欧拉图两个条件首先联通,其次度全部为欧度.那么就很easy了. 题目:hdoj1878 求一个图中欧拉图的个数. 首先通过连通性求出各个子图,然后求子图中奇数度的个数cnt,cnt/2为欧拉图的个数.若子图没有奇数度,则为一个欧拉回路. 题目:hdoj3018Ant Trip 注意这个题目中可能出现孤立点,不算入欧拉图中. AC代码: include include include include include include include include include include

[华为机试练习题]45.求某二进制数中1的个数

题目 描述: 题目标题: 求某二进制数中1的个数. 给定一个unsigned int型的正整数,求其二进制表示中"1"的个数,要求算法的执行效率尽可能地高. 详细描述: 原型: int GetCount(unsigned int num) 输入参数: num 给定的正整数 输出参数(指针指向的内存区域保证有效): 无 返回值: 返回1的个数 举例: 输入13,则对应的二进制是1101,那么1的个数为3个.则:返回3. 练习阶段: 初级 代码 /*--------------------

求出数组中所有数字的和&amp;&amp;弹出层效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)

温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对) #include<stdio.h> #include<stdlib.h> void PrintSumNumbers(int Arra[],int ASize,int Sum) { //O(1) if (ASize<2) { printf("The size of the Arra is invalid.\n"); return; } if(Sum&

数组-07. 求一批整数中出现最多的个位数字(20)

1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int i,n,a[1000],c[10]={0},max=0; 5 cin>>n; 6 for(i=0;i<n;++i) 7 cin>>a[i]; 8 for(i=0;i<n;++i) 9 while(a[i]){ 10 c[a[i]%10]++; 11 a[i]/=10; 12 } 13 for(i=0;i<10;++i) 14

iOS中求出label中文字的行数和每一行的内容

今天遇到一个需求,需要计算label中文字的行数.想了好久也没想到好的解决方法,就在网上找了下.结果发现一篇文章是讲这个的.这部分代码不但能够求出一个label中文字行数,更厉害的是能够求出每一行的内容是什么: 代码如下. #import <CoreText/CoreText.h> - (NSArray *)getLinesArrayOfStringInLabel:(UILabel *)label{ NSString *text = [label text]; UIFont *font = [