Целое десятичное преобразовать в двоичное, записать задом-наперед и перевести обратно в десятичное - 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;
}
Объяснение кода листинга программы
- Переменная
invинициализируется значением 10. - Переменная
binary_numberинициализируется значением 0. - Переменная
counterинициализируется значением 1. - В цикле while происходит преобразование десятичного числа в двоичное.
- В каждой итерации цикла значение переменной
invделится на 2 и остаток от деления добавляется к переменнойbinary_number, умноженному на значение переменнойcounter. - Значение переменной
counterумножается на 10 после каждой итерации цикла. - Цикл завершается, когда значение переменной
invстановится равным 0. - Результат преобразования двоичного числа обратно в десятичное число хранится в переменной
binary_number.