5.16
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 }