有理数求n*n矩阵自乘
先写了一个有理数的类,功能不全只有用到的乘法和加法。
并且没有考虑分母为0的恶意输入。
#include <iostream> using namespace std; #include <vector> class rational { private : int son; int mom; public : friend const rational operator+(const rational& r1,const rational& r2) { if(r1.son==0) return rational(r2); if(r2.son==0) return rational(r1); int t1,t2; t1 = r1.son * r2.mom; t2 = r2.son * r1.mom; return rational(t1+t2,r2.mom*r1.mom); } friend const rational operator*(const rational& r1,const rational& r2) { return rational(r1.son*r2.son,r2.mom*r1.mom); } void simple()//约分 { if(son==0) return; int a = son; int b = mom; if(a<b) swap(a,b); while(b!=0) { int temp = b; b = a%b; a = temp; } son = son/a; mom = mom/a; } rational(int x,int y):son(x),mom(y){simple();} void print() { cout<<son<<"/"<<mom<<" "; } }; int main() { int n; cout<<"输入方阵的介数:"; cin>>n; vector<vector<rational> > matrix; vector<vector<rational> > matrix2; int son,mom; for(int i = 0;i<n;i++) { vector<rational> tempv; for(int j = 0;j<n;j++) { cin>>son>>mom; tempv.push_back(rational(son,mom)); } matrix.push_back(tempv); } for(int i = 0;i<n;i++) { vector<rational> tempv; for(int j = 0;j<n;j++) { rational temp = rational(0,1); for(int k = 0;k<n;k++) { temp = temp + matrix[i][k]*matrix[k][j]; } tempv.push_back(temp); } matrix2.push_back(tempv); } cout<<"输入的矩阵"<<endl; for(int i = 0;i<n;i++) { for(int j=0;j<n;j++) { matrix[i][j].print(); } cout<<endl; } cout<<"得到的矩阵"<<endl; for(int i = 0;i<n;i++) { for(int j=0;j<n;j++) { matrix2[i][j].print(); } cout<<endl; } system("PAUSE"); return 0; }