This question already has answers here:
Closed 5 years ago.
Binary numbers with the same quantity of 0s and 1s
(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/

10-11 22:49
查看更多