用c语言输出1~1000之间的AB数

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

        求出1~1000之间的A,B数(包括1与1000)

本人小白,如有错误望大佬们斧正

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

        /*
        若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。
        求出1~1000之间的A,B数(包括1与1000)
        */

void ShortDivOutputBin(unsigned int input, int *al, int *bl);

int main() {

    //判断AB数的数量
    int a = 0, b = 0;
    int *al = &a, *bl = &b;

    for (int i = 1; i <= 1000; i++)
    {   
        ShortDivOutputBin(i,al,bl);
    }

    printf("%d %d",*al,*bl);
    
}

//短除法整型变二进制
void ShortDivOutputBin(unsigned int input, int *al, int *bl) {
    char temp[33] = {0};
    int i = 0;
    //01数
    int account1 = 0, account0 = 0;

    while (input) {
        temp[i] = input % 2;
        if(input % 2 == 1) {
            account1++;
        }
        else
        {
            account0++;
        }
        input = (unsigned int)input / 2;
        if(input == 0) break;                   //如果没这式,下面循环中i的初值为i--
        i++;
    }

    if(account1 > account0) *al += 1;
    else *bl += 1;
    
    /*for(i; i>=0; i--) {                         //离开循环后i的值会变
        printf("%d",temp[i]);
    }*/

    //printf("\n A数: %d B数: %d\n\n",*al,*bl);
    
}








/*int io = i;
    //计算一段二进制码中0与1的多少
    int n = 0, m = 0;

    for ( io; io>=0; io--) {
        if(temp[io] == 49) {
            n++;
        }
        else {
            m++;
        }
    }

    printf("n%d m%d\n",n,m);

    if(n>m) {
            *al += 1;
        }
        else {
            *bl += 1;
        }
    */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值