This question already has answers here:
Closed 5 years ago.
Binary numbers with the same quantity of 0s and 1s
(6个答案)
我想把1048576以下的所有整数转换成二进制数,并显示与unset相同位数的所有数字。当我使用20个整数的表
但是,当我使用40个整数的表
(6个答案)
我想把1048576以下的所有整数转换成二进制数,并显示与unset相同位数的所有数字。当我使用20个整数的表
t
时,我的程序运行良好,在这种情况下cpt
会记录正确的结果。但是,当我使用40个整数的表
t
时(这意味着我想要20'1'位和20'0'位的数字),计数器设置为1。怎么了?int main(){
long int a;
int r,j,i;
long int aux;
int z,u;
long int cpt;
int t[40];
for(int k=0;k<40;k++) t[k]=0;
cpt=0;
for(a=0;a<1048576;a++){
j=0;u=0;z=0;
aux=a;
do{
r=aux%2;
switch(r){
case 0 : t[j]=0;
aux=(aux/2);
j++;
break;
case 1 : t[j]=1;
aux=((aux-1)/2);
j++;
break;
}
}while(aux!=0);
for(i=0;i<40;i++){
if(t[i]==0) z++;
else u++;
}
if(z==u) cpt++;
}
printf("%d",cpt);
getchar();
}
最佳答案
你的循环只有1048576,也就是2^20。
你不需要循环到2:40吗?
另外,请注意int
可能不是40位宽。
注:
简单的检查所有数字的方法不能很好地伸缩。或许你应该考虑一个更聪明的解决方案?
关于c - 直到1048576的所有数字的位数都是错误的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21090186/