一道c语言编程题 在线等!

若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。

例如:(13)10=(1101)2

其中1的个数为3,0的个数为1,则称此数为A类数;

(10)10=(1010)2

其中1的个数为2,0的个数也为2,称此数为B类数;

(24)10=(11000)2

其中1的个数为2,0的个数为3,则称此数为B类数;

程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数。

输入一个数,求出1到这个数之间的AB类数

输出一行输出两个数,空格隔开。

#include<stdio.h>
#include<stdlib.h>

void NumberOf1and0_Solution(int i,int* count0,int* count1)
{
*count0 = 0;
*count1 = 0;

while(i)
{
if(i & 1)
*count1+=1;
else *count0+=1;

i = i >> 1;
}
}

void main()
{
int N,countA=0,countB=0;
int nZero,nOne,i;

for(i=1;i<=1000;i++)
{
NumberOf1and0_Solution(i,&nZero,&nOne);

if(nOne>nZero) countA++;
else countB++;
}

printf( "1~1000之间,A类数有%d个,B类数有%d个\n",countA,countB);
system( "pause ");
}
温馨提示:答案为网友推荐,仅供参考