Целое десятичное преобразовать в двоичное, записать задом-наперед и перевести обратно в десятичное - C (СИ)

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

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

Всем привет Пожалуйста помогите разобраться Целое положительное число m записывается в двоичной системе счисления, и разряды в этой записи переставляются в обратном порядке. Получившееся двоичное число переводится в десятичную систему счисления, и принимается за значение функции F(m). Например, m=41, F(m)=37. Написать и протестировать функцию. Код есть, но глаза уже замыленые и не видят из-за чего программа зацикливается
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
 
int main()
{
    int func(a)
    {
        int inv = 0,
            fm = 0,
            x1 = 0,
            step = 0;
 
        while (a >= 1)
        {
            inv = (inv * 10) + (a % 10);
            a = a / 10;
        };
 
        while (inv >= 1)
        {
            x1 = (x1 * 10) + (inv % 2);
            inv = inv / 2;
        };
 
        while (x1 >= 1);
        {
            fm = fm + ((x1 % 10) * pow(2, step));
            step += 1;
        };
        return fm;
    }
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int m;
    printf("\n \t Программа целое положительное число m записывается "
           "\n в двоичной системе счисления, и разряды в этой записи "
           "\n переставляются в обратном порядке. Получившееся двоичное"
           "\n  число переводится в десятичную систему счисления и "
           "\n выводится на экран."
           "\n \t Введите m: ");
    scanf("%i", &m);
    printf("Результат преобразования: %i", func(m));
    return 0;
}
Заранее очень признателен

Решение задачи: «Целое десятичное преобразовать в двоичное, записать задом-наперед и перевести обратно в десятичное»

textual
Листинг программы
        int inv = 10;
        int binary_number = 0;
        int counter = 1;
        while (inv > 0) {
            binary_number += (inv % 2) * counter;
            inv /= 2;
            counter *= 10;
        }

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

  1. Переменная inv инициализируется значением 10.
  2. Переменная binary_number инициализируется значением 0.
  3. Переменная counter инициализируется значением 1.
  4. В цикле while происходит преобразование десятичного числа в двоичное.
  5. В каждой итерации цикла значение переменной inv делится на 2 и остаток от деления добавляется к переменной binary_number, умноженному на значение переменной counter.
  6. Значение переменной counter умножается на 10 после каждой итерации цикла.
  7. Цикл завершается, когда значение переменной inv становится равным 0.
  8. Результат преобразования двоичного числа обратно в десятичное число хранится в переменной binary_number.

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


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

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

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