Files
ARPZ-s1-pr3/task2.cpp
2024-11-16 16:08:19 +03:00

61 lines
1.8 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]();
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;
}