task4 completed

This commit is contained in:
2024-11-16 10:09:08 +03:00
parent cb07ec9e81
commit 72eed0ad78

88
task4.cpp Normal file
View File

@@ -0,0 +1,88 @@
// Задание 4
// Написать программу для умножения двух больших чисел столбиком.
// Обратите внимание на количество цифр в произведении: их скорее всего
// будет больше, чем в исходных числах
#include <iostream>
void printArray(int* arr, int size)
{
// Печать массива, пропуская ведущие нули
bool leadingZero = true;
for (int i = 0; i < size; i++)
{
if (arr[i] != 0)
{
leadingZero = false;
}
if (!leadingZero)
{
std::cout << arr[i];
}
}
if (leadingZero)
{
std::cout << "0"; // Если все нули
}
std::cout << std::endl;
}
int* multiplyDecimal(int* A, int sizeA, int* B, int sizeB, int& resultSize)
{
resultSize = sizeA + sizeB; // Максимально возможный размер результата
int* result = new int[resultSize](); // Инициализируем массив нулями
// Умножаем каждую цифру первого числа на каждую цифру второго числа
for (int i = sizeA - 1; i >= 0; i--)
{
for (int j = sizeB - 1; j >= 0; j--)
{
int product = A[i] * B[j];
int sum = product + result[i + j + 1]; // Добавляем к текущему разряду результата
result[i + j + 1] = sum % 10; // Текущий разряд
result[i + j] += sum / 10; // Перенос
}
}
return result;
}
int main()
{
std::setlocale(LC_ALL, "ru");
int sizeA, sizeB;
std::cout << "Введите длину первого числа: ";
std::cin >> sizeA;
int* A = new int[sizeA];
std::cout << "Введите первое число (цифры от 0 до 9): ";
for (int i = 0; i < sizeA; i++)
{
std::cin >> A[i];
}
std::cout << "Введите длину второго числа: ";
std::cin >> sizeB;
int* B = new int[sizeB];
std::cout << "Введите второе число (цифры от 0 до 9): ";
for (int i = 0; i < sizeB; i++)
{
std::cin >> B[i];
}
int resultSize;
int* result = multiplyDecimal(A, sizeA, B, sizeB, resultSize);
std::cout << "Результат умножения: ";
printArray(result, resultSize);
// Освобождаем память
delete[] A;
delete[] B;
delete[] result;
return 0;
}