diff --git a/.gitignore b/.gitignore index 92bfefd..75978cb 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,7 @@ tags # Persistent undo [._]*.un~ +# ccls +a.out +.ccls +.ccls-cache/* diff --git a/task1.cpp b/task1.cpp new file mode 100644 index 0000000..4c39cfd --- /dev/null +++ b/task1.cpp @@ -0,0 +1,79 @@ +// Задание 1 +// Написать программу для сложения и вычитания двух больших чисел в +// столбик. Для представления чисел использовать массив, в котором будут +// храниться цифры числа. При реализации процедуры вычитания +// предпочтительно из большего вычитать меньшее. Для этого +// первоначально определять, какое из двух чисел больше + +#include + +int* sum(int *a, int *b, int size) +{ + // a - первое число + // b - второе число + // size - длина числа + + // Инициализируем массив для хранения результирующего числа с длиной size + // ************************************************************************ + // *ВНИМАНИЕ! Скобки на конце заполняют массив нулями! ЭТО ВАЖНО! + // *В Windows массив может изначально содержать биты, неочищенные из памяти + // *после работы других программ, что приведет непредвиденным последствиям! + // ************************************************************************ + int *result = new int[size](); + + // Выполняем поразрядное сложение + for (int i = 0; i < size; i++) + { + int sum = a[i] + b[i]; + result[i] = sum % 10; // Помещаем то, что оказалось меньше 10, в текущий разряд + + if (i + 1 < size) // Избегаем вставку в следующий разряд при переполнении + { + a[i + 1] += sum / 10; // Помещаем то, что оказалось больше 10, в следующий разряд + } + } + + // Возвращаем результирующий массив + return result; +} + +int main() { + + std::setlocale(LC_ALL, "ru"); + + int size; + int *a; + int *b; + + std::cout << "Максимально предусматриваемая длина числа: "; + std::cin >> size; + + // Инициализируем массивы чисел. Все элементы аналогично инициализируем нулями + a = new int[size](); + b = new int[size](); + + std::cout << "Введите первое число: "; + for (int i = 0; i < size; i++) + { + std::cin >> a[i]; + a[i] %= 10; + } + + std::cout << "Введите второе число: "; + for (int i = 0; i < size; i++) + { + std::cin >> b[i]; + b[i] %= 10; + } + + int *result = sum(a, b, size); + + std::cout << "Результат сложения: "; + for (int i = 0; i < size; i++) + { + std::cout << int(result[i]) << " "; + } + std::cout << std::endl; + + return 0; +} diff --git a/task2.cpp b/task2.cpp new file mode 100644 index 0000000..4c7cafb --- /dev/null +++ b/task2.cpp @@ -0,0 +1,18 @@ +// Задание 2 +// Написать программу для реализации ускоренного сложения чисел в +// двоичной системе (аналогично примеру на рис. 1) + +#include + +bool* sum(bool* a, bool* b, unsigned char size) +{ + +} + +int main() { + + unsigned char size; + + return 0; +} +