forked from Dashark/hello-world
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhomework6.cpp
More file actions
80 lines (71 loc) · 1.62 KB
/
Copy pathhomework6.cpp
File metadata and controls
80 lines (71 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include<stdio.h>
#include<stdlib.h>
int min(int x, int y) {
return x < y ? x : y;
}
int max(int x, int y) {
return x > y ? x : y;
}
void convolution(int* input1, int* input2, int* output, int mm, int nn)
{
//存储地址
int* xx = (int*)malloc(sizeof(int) * (mm + nn - 1));
//开始卷积
for (int i = 0; i < mm + nn - 1; i++)
{
xx[i] = 0;
//以位数最少的卷积作为卷积次数
for (int j = 0; j < min(mm,nn) ; j++) {
//第一个卷积比第二个卷数积少执行
if (mm <= nn) {
if (i - j >= 0 && i - j < max(mm, nn)) {
printf("%d ", input1[j]);
printf("%d ", input2[i-j]);
xx[i] += input1[j] * input2[i - j];
}
}
//第一个卷积比第二个卷积数多执行
else {
if (i - j >= 0 && i - j < max(mm, nn)) {
printf("%d ", input1[i-j]);
printf("%d ", input2[j]);
xx[i] += input2[j] * input1[i - j];
}
}
printf("\n");
}
}
printf("\n");
for (int i = 0; i < mm+nn-1; i++) {
output[i] = xx[i];
}
delete[] xx;
}
int main() {
int mm, nn;
printf("请输入第一个卷积数目\n");
scanf_s("%d", &mm);
//malloc分配空间
int* input1 = (int*)malloc(sizeof(int) * mm);
printf("请输入第一个卷积数值\n");
for (int i = 0; i < mm; i++) {
scanf_s("%d", &input1[i]);
}
printf("请输入第二个卷积数目\n");
scanf_s("%d", &nn);
int* input2 = (int*)malloc(sizeof(int) * nn);
printf("请输入第二个卷积数值\n");
for (int j = 0; j < nn; j++) {
scanf_s("%d", &input2[j]);
}
//卷积最大空间
int* output = (int*)malloc(sizeof(int) * (mm+nn-1));
convolution(input1, input2, output, mm, nn);
printf("卷积结果\n");
for (int i = 0; i < mm + nn - 1; i++)
{
printf("%d ", output[i]);
}
printf("\n");
return 0;
}