Реализуйте в классе binary перегрузку четырёх операций: операция сложенияоперация вычитанияоперация умноженияоперация делениякаждая операция принимает на вход двоичное число и выдаёт ответ в виде двоичного числа. операция деления производит деление нацело.напишите программу, которая принимает на вход два бинарных числа, находит их сумму, разность, произведение и отношение и выводит их на экран в виде двоичных чисел.class binary {protected: int data[32]; // цифры двоичного числаpublic: binary(); // конструктор по умолчанию binary(int value); // конструктор, получающий двоичное число из десятичного binary(char *s); // конструктор, получающий двоичное число из строки, содержащей двоичное число void show(); // вывод двоичного числа на экран int to_int(); // перевод двоичного числа в десятичное}; binary: : binary() { for (int i = 0; i < 32; ++i) data[i] = 0; }binary: : binary(int value) { for (int i = 0; i < 32; ++i) data[i] = 0; int t = 31; while (value) { data[t--] = value % 2; value /= 2; }}binary: : binary(char *s) { int size = strlen(s)-1; for (int i = 0; i < 32; ++i) data[i] = 0; for (int i = 31; size > = 0; --size) data[i--] = s[size] - '0'; }void binary: : show() { int i = 0; while (i < 32 & & ! data[i]) ++i; if (i == 32) { cout < < 0; return; } for (; i < 32; ++i) cout < < data[i]; }int binary: : to_int() { int pow = 1, res = 0; for (int i = 31; i > = 0; --i) { res += data[i] * pow; pow *= 2; } return res; }
7
Объяснение:
Заметим, что две операции типа 2 не меняют число: если было число x, то после первого вычитания получим 2 - x, после второго 2 - (2 - x) = x.
Значит, в самой короткой последовательности, которая получает 231 из числа 1, нет двух операций типа 2 подряд.
Рассмотрим самую короткую последовательность, получающую 231. Идем с конца:
231 делится на 3. Если бы последней операцией было вычитание, то на предыдущем шаге было бы -229, это число не делилось бы на 3, и получилось бы, что в последовательности два вычитания подряд, чего быть не должно. Значит, последняя операция - умножение, число на предыдущем шаге - 231 / 3 = 7777 не делится на 3, единственный вариант для предыдущего шага - получить из -75 путем вычитания-75 делится на 3, аналогично первому рассуждению это результат умножения числа -25 на 3-25 не делится на 3, оно получено из 27 путем вычитания27 делится на 3, аналогично, получено из 9 умножением9 делится на 3, аналогично, получено из 3 умножением3 могло получиться из 1 за один шаг умножением на 3.Итак, всё происходило так:
(1) 1 * 3 = 3
(1) 3 * 3 = 9
(1) 9 * 3 = 27
(2) 2 - 27 = -25
(1) -25 * 3 = -75
(2) 2 - (-75) = 77
(1) 77 * 3 = 231