You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
int noOfDigit(long a)
|
|
{
|
|
int n = 0;
|
|
while (a > 0)
|
|
{
|
|
a /= 10;
|
|
n++;
|
|
}
|
|
return n;
|
|
}
|
|
void schonhageStrassenMultiplication(long x, long y, int n, int m)
|
|
{
|
|
int linearConvolution[n + m - 1];
|
|
for (int i = 0; i < (n + m - 1); i++)
|
|
linearConvolution[i] = 0;
|
|
long p = x;
|
|
for (int i = 0; i < m; i++)
|
|
{
|
|
x = p;
|
|
for (int j = 0; j < n; j++)
|
|
{
|
|
linearConvolution[i + j] += (y % 10) * (x % 10);
|
|
x /= 10;
|
|
}
|
|
y /= 10;
|
|
}
|
|
cout << "The Linear Convolution is: ( ";
|
|
for (int i = (n + m - 2); i >= 0; i--)
|
|
{
|
|
cout << linearConvolution[i] << " ";
|
|
}
|
|
cout << ")";
|
|
long product = 0;
|
|
int nextCarry = 0, base = 1;
|
|
;
|
|
for (int i = 0; i < n + m - 1; i++)
|
|
{
|
|
linearConvolution[i] += nextCarry;
|
|
product = product + (base * (linearConvolution[i] % 10));
|
|
nextCarry = linearConvolution[i] / 10;
|
|
base *= 10;
|
|
}
|
|
cout << "\nThe Product of the numbers is: " << product;
|
|
}
|
|
int main(int argc, char **argv)
|
|
{
|
|
cout << "Enter the numbers:";
|
|
long a, b;
|
|
cin >> a >> b;
|
|
int n = noOfDigit(a);
|
|
int m = noOfDigit(b);
|
|
schonhageStrassenMultiplication(a, b, n, m);
|
|
}
|
|
|
|
/*
|
|
Enter the numbers:3452 1245
|
|
The Linear Convolution is: ( 3 10 25 43 44 33 10 )
|
|
Product of the numbers is: 4297740
|