Есть ли в машинном представлении целого числа одинаковое количество нулей и единиц - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Собственно, сам текст задачи в заголовке. Код программы я написал, но почему-то после введения самого числа программы ничего не выводит и нажатие enter ни к чему не приводит. Где у меня есть какие-то недоработки?
#include <stdio.h>
#include <math.h>
 
int main(void)
{
    int ost,n,k,odin,noll;
    printf("vvedite chislo\n");
    scanf(" %d ",&n);
    noll=0; odin=0;
    k=n;
    if (n==0) printf("neravnoe kolichestvo nulei i ediniz");
    else if (n>0) {
        while (n>0) {
            ost = n%2;
            if (ost==0) noll+=1;
            else if (ost==1) odin+=1;
            n=n/10;
 
    }
        noll=noll + (sizeof(int)*8-(noll+odin));
    }
    else if (n<0) {
        n=-n;
        while (n>0) {
            int flag=0;  //зная, что будет инвертирование битов, считаю кол-во наоборот.
                           //Так как потом будет прибавляться единица, возможно замещение
                          //полученных единиц нулями до первого нуля, который станет единицей.
                         //Пока этого не произошло flag=0
            ost = n%2;
            n=n/10;
            if (ost==0 && flag == 0)
                noll+=1;
            else if (ost==0 && flag == 1)
                odin+=1;
            else if (ost==1 && flag == 0) {
                odin+=1;
                flag = 1;
            }
            else if (ost==1 && flag == 1)
                noll+=1;
        }
        noll=noll + (sizeof(int)*8-(noll+odin));
    }
    if (k!=0 && noll==odin) printf("odinakovoe kolichestvo nulei i ediniz");
    else if (k!=0 && noll!=odin) printf("neravnoe kolichestvo nulei i ediniz");
    return 0;
}

Решение задачи: «Есть ли в машинном представлении целого числа одинаковое количество нулей и единиц»

textual
Листинг программы
for(ed=nul=0; n; ) {
 if (n&1) ed++;
 else nul++;
 n = (n>>1);
}

Объяснение кода листинга программы

В данном коде выполняется подсчет количества нулей и единиц в машинном представлении целого числа.

  1. Переменная n инициализируется значением, равным данному целому числу.
  2. Переменная ed инициализируется нулем и используется для подсчета количества единиц.
  3. Переменная nul инициализируется нулем и используется для подсчета количества нулей.
  4. В цикле происходит следующее:
    • Проверяется, является ли самый младший бит числа единицей (n&1). Если да, то к переменной ed прибавляется единица.
    • Если самый младший бит числа равен нулю, то к переменной nul прибавляется единица.
    • Число n сдвигается вправо на один бит (n>>1).
    • Цикл продолжается до тех пор, пока число n не станет равным нулю. Таким образом, после выполнения данного кода, в переменной ed будет содержаться количество единиц, а в переменной nul - количество нулей в машинном представлении данного целого числа.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.625 из 5
Похожие ответы