Files
ARPZ-s1-pr3/task2.cpp
2024-11-16 09:53:35 +03:00

61 lines
1.9 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Задание 2
// Написать программу для реализации ускоренного сложения чисел в
// двоичной системе (аналогично примеру на рис. 1)
#include <iostream>
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;
}