task4 completed
This commit is contained in:
88
task4.cpp
Normal file
88
task4.cpp
Normal 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user