Целое десятичное преобразовать в двоичное, записать задом-наперед и перевести обратно в десятичное - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д