表达式计算之二:分数的数据结构

来源:互联网 发布:mysql 大量statistics 编辑:程序博客网 时间:2024/04/29 09:41

#include <cmath>
#include <iostream>
using namespace std;

class nums
{
private:
      long iUp,iDn;
public:
      nums()
      {
            iUp=0;
            iDn=1;
      }
      void simplification();
      void record(double iA,double iB);
      void irecord(long iA,long iB);
      long return_Up();
      long return_Dn();
      void display();
      friend nums operator + (nums nA,nums nB);
      friend nums operator - (nums nA,nums nB);
      friend nums operator * (nums nA,nums nB);
      friend nums operator / (nums nA,nums nB);
};
void nums::display()
{
     if (return_Dn()!=1)
     {
           cout<<return_Up()<<"/"<<return_Dn();
     }
     else
     {
           cout<<return_Up();      
     }
}         
void nums::record(double iA,double iB=1)
{
     while ((floor(iA)!=iA)||(floor(iB)!=iB))
     {
          iA*=10;
          iB*=10;
     }
     iUp=(long) iA;
     if (iB!=0)
     {
          iDn=(long) iB;
     }
     simplification();
}    
void nums::irecord(long iA,long iB)
{
     iUp=iA;
     iDn=iB;
}
void nums::simplification()
{
     int iT,iA,iB;
     if (iUp>=iDn)
     {
          iA=iUp;
          iB=iDn;
     }
     else
     {
          iA=iDn;
          iB=iUp;
     }
     while (iB!=0)
     {
        iT=iA;
        iA=iB;
        iB=iT%iA;
     }
     iUp/=iA;
     iDn/=iA;
     if (iDn<0)
     {
          iDn=-iDn;
          iUp=-iUp;
     }
}
long nums::return_Up()
{
     return iUp;
}
long nums::return_Dn()
{
     return iDn;
}
nums operator + (nums nA,nums nB)
{
     nums nC;
     nC.irecord(nA.return_Up()*nB.return_Dn()+nA.return_Dn()*nB.return_Up(),nA.return_Dn()*nB.return_Dn());
     nC.simplification();
     return nC;
}
nums operator - (nums nA,nums nB)
{
     nums nC;
     nC.irecord(nA.return_Up()*nB.return_Dn()-nA.return_Dn()*nB.return_Up(),nA.return_Dn()*nB.return_Dn());
     nC.simplification();
     return nC;
}
nums operator * (nums nA,nums nB)
{
     nums nC;
     nC.irecord(nA.return_Up()*nB.return_Up(),nA.return_Dn()*nB.return_Dn());
     nC.simplification();
     return nC;
}
nums operator / (nums nA,nums nB)
{
     nums nC;
     nC.irecord(nA.return_Up()*nB.return_Dn(),nA.return_Dn()*nB.return_Up());
     nC.simplification();
     return nC;
}

原创粉丝点击