Files
ARPZ-s1-pr3/task1.cpp
2024-11-16 07:40:32 +03:00

78 lines
2.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.
// Задание 1
// Написать программу для сложения и вычитания двух больших чисел в
// столбик. Для представления чисел использовать массив, в котором будут
// храниться цифры числа. При реализации процедуры вычитания
// предпочтительно из большего вычитать меньшее. Для этого
// первоначально определять, какое из двух чисел больше
#include <iostream>
int* sum(int *a, int *b, int size)
{
// a - первое число
// b - второе число
// size - длина числа
// Инициализируем массив для хранения результирующего числа с длиной size
// ************************************************************************
// *ВНИМАНИЕ! Скобки на конце инициализируют массив нулями! ЭТО ВАЖНО!
// *В Windows массив может изначально содержать биты, неочищенные из памяти
// *после работы других программ, что приведет непредвиденным последствиям!
// ************************************************************************
int *result = new int[size]();
// Выполняем поразрядное сложение
for (int i = size - 1; i >= 0; i--)
{
int sum = a[i] + b[i];
result[i] = sum % 10; // Помещаем то, что оказалось меньше 10, в текущий разряд
if(i - 1 >= 0 && sum >= 10) // Избегаем вставку в следующий разряд при переполнении
{
b[i - 1] = b[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];
}
std::cout << "Введите второе число: ";
for (int i = 0; i < size; i++)
{
std::cin >> b[i];
}
int *result = sum(a, b, size);
std::cout << "Результат сложения: ";
for (int i = 0; i < size; i++)
{
std::cout << result[i] << " ";
}
std::cout << std::endl;
return 0;
}