Определить, в двоичной записи какого из заданных чисел больше нулей - C (СИ)

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

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

Задача: на входе два числа в десятичной системе счисления, узнать в каком из чисел больше 0-ей в их двоичной форме. Ввод исходных данных через параметры командной строки. Что-то такое написал (и то с чужой помощью), не работает. Прошу помочь.
#include 
#include 
#include 
 
int func(int bin, int i)
{
    int cnt=0;
    for(i-1; i!=0; i--)
    {
        if((bin%10) == 0)
            cnt++;
        bin /= 10;
    }
    return cnt;
}
 
int dtb(char* str, int* i)
{
    int dec, bin=0;
    dec = atoi(str);
    printf("%d  ", dec); /* для проверки */
    for(*i; dec > 0; *i++)
    {
        bin += (dec%2) * pow(10.0, *i);
        printf("%d  ", bin); /* для проверки */
        dec /= 2;
        printf("%d  ", dec); /* для проверки */
    }
    return(bin);
}
 
int main(int argc, char** argv)
{
    int cnt1, cnt2, bin1, bin2, i=0;
    if(argc < 3){puts("Error"); return 0;}
    bin1 = dtb(argv[1], &i);
    cnt1 = func(bin1, i);
    bin1 = dtb(argv[2], &i);
    cnt1 = func(bin1, i);
    if(cnt1 > cnt2)puts("arg1 > arg2");
    else if(cnt1 < cnt2)puts("arg1 < arg2");
    else puts("arg1 == arg2");
}

Решение задачи: «Определить, в двоичной записи какого из заданных чисел больше нулей»

textual
Листинг программы
#include "stdio.h"
#include "stdlib.h"
 
int cnt(int n) {
    int c=0;
    while(n) {
        if(!(n&1)) c++;
        n>>=1;
    }
    return c;
}
 
int main(int npar, char *par[]) {
    int c1,c2;
    c1=cnt(atoi(par[1]));
    c2=cnt(atoi(par[2]));
    if(c1<c2)  puts("par1<par2");
    if(c1>c2)  puts("par1>par2");
    if(c1==c2) puts("par1==par2");
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы для работы с языком C
  2. Объявляем функцию cnt, которая принимает целочисленный аргумент n и возвращает целочисленное значение, равное количеству цифр 1 в двоичной записи числа n
  3. В функции main объявляем две переменные c1 и c2, которые будут хранить результаты подсчета количества цифр 1 в двоичной записи чисел, переданных в функцию main в качестве аргументов
  4. Вызываем функцию cnt, передавая в нее в качестве аргумента первое переданное в функцию main число и сохраняем результат в переменную c1
  5. Вызываем функцию cnt, передавая в нее в качестве аргумента второе переданное в функцию main число и сохраняем результат в переменную c2
  6. Сравниваем значения переменных c1 и c2 и выводим на экран соответствующее сообщение в зависимости от результата сравнения

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


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

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

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