// Задание 2 // Написать программу для реализации ускоренного сложения чисел в // двоичной системе (аналогично примеру на рис. 1) #include bool* addBinary(bool* A, bool* B, int size) { bool* result = new bool[size](); // Результат может быть на 1 бит больше bool carry = false; // Перенос for (int i = size - 1; i >= 0; i--) { // Сложение с учетом переноса bool sum = A[i] ^ B[i] ^ carry; // XOR для сложения carry = (A[i] && B[i]) || (carry && (A[i] || B[i])); // Логика переноса result[i + 1] = sum; // Записываем результат } result[0] = carry; // Записываем перенос в старший бит return result; } int main() { std::setlocale(LC_ALL, "ru"); int size; std::cout << "Введите длину двоичных чисел: "; std::cin >> size; bool* a = new bool[size](); bool* b = new bool[size](); std::cout << "Введите первое двоичное число (0 или 1): "; for (int i = 0; i < size; i++) { int bit; std::cin >> bit; a[i] = (bit != 0); // Преобразуем в bool } std::cout << "Введите второе двоичное число (0 или 1): "; for (int i = 0; i < size; i++) { int bit; std::cin >> bit; b[i] = (bit != 0); // Преобразуем в bool } bool* result = addBinary(a, b, size); std::cout << "Результат сложения: "; for (int i = 0; i < size + 1; i++) { std::cout << result[i] << " "; } std::cout << std::endl; // Освобождаем память delete[] a; delete[] b; delete[] result; return 0; }