一道c语言编程题 在线等!
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。例如:(13)10=(1101)2其中1的个数...
若将一个正整数化为二进制数,在此二进制数中,我们将数字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类数
输出一行输出两个数,空格隔开。 展开
例如:(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类数
输出一行输出两个数,空格隔开。 展开
1个回答
展开全部
#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 ");
}
#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 ");
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询