1 #include <iostream>
2 #include <iomanip>
3 using namespace std;
4 class matrix{
5 private:
6 int row,column;
7 int **mat;
8 public:
9 matrix(const matrix& mx){
10 this->row=mx.row;
11 this->column=mx.column;
12 this->mat=new int*[row];
13 for (int i = 0; i <row ; ++i) {
14 this->mat[i]=new int[column];
15 for (int j = 0; j <column ; ++j) {
16 this->mat[i][j]=mx.mat[i][j];
17 }
18 }
19 }
20 matrix(int r,int c){
21 row=r;
22 column=c;
23 mat=new int*[row];
24 for (int i = 0; i <row ; ++i) {
25 mat[i]=new int[column];
26 for (int j = 0; j <column ; ++j) {
27 mat[i][j]=0;
28 }
29 }
30 }
31 ~matrix(){
32 for (int i = 0; i <row ; ++i) {
33 delete []mat[i];
34 }
35 delete []mat;
36 }
37 void read(){
38 for (int j = 0; j <row ; ++j) {
39 for (int i = 0; i <column ; ++i) {
40 cin>>mat[j][i];
41 }
42 }
43 }
44 matrix operator*(matrix& mt){
45 if(this->row==1&&this->column==1){
46 for (int i = 0; i < mt.row; ++i) {
47 for (int j = 0; j <mt.column ; ++j) {
48 mt.mat[i][j]=this->mat[0][0]*mt.mat[i][j];
49 }
50 }
51 return mt;
52 }else{
53 matrix rs(this->row,mt.column);
54 for (int i = 0; i < this->row; ++i) {
55 for (int j = 0; j <mt.column ; ++j) {
56 for (int k = 0; k <mt.row ; ++k) {
57 rs.mat[i][j]+=this->mat[i][k]*mt.mat[k][j];
58 }
59 }
60 }
61 return rs;
62 }
63 }
64 void display(){
65 for (int i = 0; i <row ; ++i) {
66 for (int j = 0; j <column ; ++j) {
67 cout<<setw(10)<<mat[i][j];
68 }
69 cout<<endl;
70 }
71 }
72 };
73 int main()
74 {
75 int r,c;
76 cin>>r>>c;
77 matrix m1(r,c);
78 m1.read();
79 int r1,c1;
80 cin>>r1>>c1;
81 matrix m2(r1,c1);
82 m2.read();
83 if(c==r1||r==1&&c==1){
84 matrix m3=m1*m2;
85 m3.display();
86 }
87 else{
88 cout<<"Invalid Matrix multiplication!";
89 }
90 return 0;
91 }