有理数求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; 
} 
原文地址:https://www.cnblogs.com/727713-chuan/p/3352801.html