卷积后数组长度:m + n - 1
方法1(OK)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
#define INF 0xfffffff
#define maxn 100010
int main() {
//int m = 5, n = 5;
//int a[5] = {0, 1, 0, 2, 1}, b[5] = {0, 1, 0, 2, 1};
int m = 3, n = 3;
int a[5] = {1, 2, 3}, b[5] = {2, 3, 1};
int i, j;
int k = m + n - 1; //卷积后数组长度
int c[k];
memset(c, 0, sizeof(c)); //注意一定要清零
/**卷积计算**/
for(i = 0; i < k; i++) {
for(j = max(0, i + 1 - n); j <= min(i, m - 1); j++) {
c[i] += a[j] * b[i - j];
}
cout << c[i] << " ";
}
/****/
cout << endl;
}
结果如下:
方法2
#include<iostream>
using namespace std;
int main()
{
int Array1[] = { 1,2,3 }, Array2[] = { 2,3,1 };
int temp;
int n = sizeof(Array1) / sizeof(int) + sizeof(Array2) / sizeof(int) - 1;
int Array3[sizeof(Array1) / sizeof(int) + sizeof(Array2) / sizeof(int) - 1] = {0,0,0,0,0};
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 3; j++)
{
//之所以加上这个判断 是因为在C和C++数组元素的下表不能是负数
//目前所知 只有在python中 数组元素可以为下标 a[-1]代表数组的倒数第一个元素
if (i - j < 0||i-j>2)
{
temp = 0;
}
else
{
temp = Array2[i - j];
}
Array3[i] = Array3[i] + Array1[j] * temp;
}
}
for (int i = 0; i < n; i++)
{
cout << Array3[i] << endl;
}
return 0;
}
链接:https://blog.youkuaiyun.com/MIKASA3/article/details/52325433
https://blog.youkuaiyun.com/HopesunIce/article/details/100576655