若将一个正整数化为二进制数,在此二进制数中,我们将数字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;
}
*/