AB类数 求源代码 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.例如:(13)10=(1101)2 其中1的个数为3,0的
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/05 21:36:44
AB类数 求源代码 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.例如:(13)10=(1101)2 其中1的个数为3,0的
AB类数 求源代码
若将一个正整数化为二进制数,在此二进制数中,我们将数字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两类数的个数.
AB类数 求源代码 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数.例如:(13)10=(1101)2 其中1的个数为3,0的
#include<stdio.h>
typedef unsigned long u32; /* 将无符号长整型取别名为u32 */
typedef signed long s32; /* 将有符号长整型取别名为s32 */
typedef enum Boolean { /* 定义一个枚举类型,将1取名为True(真),0为False(假) */
True=1,
False=(!True)
} Boolean;
Boolean isTypeA(u32 naturalNumber); /* isTypeA函数原型 */
int main()
{
u32 i=1;
Boolean type;
s32 amountOfA=0,amountOfB=0; /* 两个变量分别统计A类数和B类数 */
while(type=isTypeA(i),i<=1000)
{
if(type)
++amountOfA;
else
++amountOfB;
++i;
}
printf("1到1000中A类数有%ld个,B类有%ld个\n",amountOfA,amountOfB);
return 0;
}
Boolean isTypeA(u32 naturalNumber)
{
u32 n=naturalNumber;
s32 numberOf0=0,numberOf1=0;
while(n>0)
{
if( 0==(n&1) ) /* 判断1个无符号数最低位为0还是为1 */
++numberOf0;
else
++numberOf1;
n=n>>1; /*向右移1位*/
}
if(numberOf1>numberOf0)
return True;
else
return False;
}