编写一个函数,实现返回一个二进制有多少个1(用C++)

如题所述

如果楼主是指输入一个整数求其二进制数的话,可参考以下三种解法:
#include <iostream>
#include <stdlib.h>
using namespace std;

//解法1
// int Count(unsigned int value)
// {
// int num=0;
//
// while(0!=value)
// {
// if(1==value%2)
// {
// num++;
// }
// value/=2;
// }
// return num;
// }

//解法2
//int Count(unsigned int value)
//{
// int num=0;
//
// while(0!=value)
// {
// num+=value&0x01;
// value>>=1;
// }
// return num;
//}

//解法3
int Count(unsigned int value)
{
int num=0;

while(0!=value)
{
value&=(value-1);
num++;
}
return num;
}

void main()
{
int value;

cout<<"请输入一个整数:";
cin>>value;
cout<<"整数"<<value<<"的二进制中的1的个数为:"<<Count(value)<<endl;
system("pause");
}

注:虽然输入的值可为有符号或无符号整数,但函数Count的参数必须为无符号类型,否则输入负数时,若不转换为无符号类型,则会造成求余和位运算出错,而使得结果不是期望的值。

参考资料:编程之美——微软技术面试心得

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-06
// 2_muchong.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"//VS2010的专属头文件,其他软件可以去掉
#include<string.h> //头文件
#include <stdlib.h>
int f(int n)
{
char a[1000];
itoa(n,a,2);//转化为二进制的字符串(change into binary char)
int i,sum=0;
for(i=0;i<strlen(a);i++)
if(a[i]==49)//字符“1”的ASII号码为 49
sum++;
return sum;
}

void main()
{
int n;
printf("Please input a decimal number:\n");//输入一个十进制数
scanf("%d",&n);
printf("This decimal number has %d \"1\" when it was changed into binary number.\n",f(n));//输出结果
system("pause");//暂停,方便查看结果
}
第2个回答  2011-08-06
int f(int n)
{char a[1000];
itoa(n,a,2);
int i,sum=0;
for(i=0;i<strlen(a);i++)
if(a[i]==49)
sum++;
return sum;}
main()
{int n;
scanf("%d",&n);
printf("%d",f(n));
}本回答被提问者采纳
第3个回答  2011-08-06
int f( int x)
{ int count=0;
while(x)
{ x&=x-1;
cout++;}
return count;}
第4个回答  2011-08-06
maihx 已经说的很明白了!都行!
第5个回答  2011-08-06
// 2_muchong.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"//VS2010的专属头文件,其他软件可以去掉
#include<string.h> //头文件
#include <stdlib.h>
int f(int n)
{
char a[1000];
itoa(n,a,2);//转化为二进制的字符串(change into binary char)
int i,sum=0;
for(i=0;i<strlen(a);i++)
if(a[i]==49)//字符“1”的ASII号码为 49
sum++;
return sum;
}

void main()
{
int n;
printf("Please input a decimal number:\n");//输入一个十进制数
scanf("%d",&n);
printf("This decimal number has %d \"1\" when it was changed into binary number.\n",f(n));//输出结果
system("pause");//暂停,方便查看结果
}
第6个回答  2011-08-06
int f(int n)
{char a[1000];
itoa(n,a,2);
int i,sum=0;
for(i=0;i<strlen(a);i++)
if(a[i]==49)
sum++;
return sum;}
main()
{int n;
scanf("%d",&n);
printf("%d",f(n));
}本回答被提问者采纳
第7个回答  2011-08-06
int f( int x)
{ int count=0;
while(x)
{ x&=x-1;
cout++;}
return count;}
第8个回答  2011-08-06
maihx 已经说的很明白了!都行!
相似回答
大家正在搜