Есть ли в машинном представлении целого числа одинаковое количество нулей и единиц - 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); }
Объяснение кода листинга программы
В данном коде выполняется подсчет количества нулей и единиц в машинном представлении целого числа.
- Переменная
n
инициализируется значением, равным данному целому числу. - Переменная
ed
инициализируется нулем и используется для подсчета количества единиц. - Переменная
nul
инициализируется нулем и используется для подсчета количества нулей. - В цикле происходит следующее:
- Проверяется, является ли самый младший бит числа единицей (n&1). Если да, то к переменной
ed
прибавляется единица. - Если самый младший бит числа равен нулю, то к переменной
nul
прибавляется единица. - Число
n
сдвигается вправо на один бит (n>>1). - Цикл продолжается до тех пор, пока число
n
не станет равным нулю. Таким образом, после выполнения данного кода, в переменнойed
будет содержаться количество единиц, а в переменнойnul
- количество нулей в машинном представлении данного целого числа.
- Проверяется, является ли самый младший бит числа единицей (n&1). Если да, то к переменной
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д