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;
}