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