分数重载

#include<iostream>
using namespace std;
class FS
{
private:
int fz;
int fm;
public:
FS()
{
fm=1;
fz=0;
}
void set(int m,int z)
{
fm=m;
fz=z;
}
void del()
{
fm=1;
fz=0;
}
FS operator + (const FS &f);
int huajian(int,int);
void display();
} ;

FS FS::operator +(const FS &f)
{
FS f1;
f1=f;
f1.fz=fz*f1.fm+f1.fz*fm;
f1.fm=fm*f1.fm;
return f1;
}

int FS::huajian(int Fenz,int Fenm)
{
while(Fenm!=0)
{
int temp=Fenz%Fenm;
Fenz=Fenm;
Fenm=temp;
}
return Fenz;
}

void FS::display()
{
if(fz==0)
{
cout<<"0z1m"<<endl;
}
else
{
int l=huajian(fz,fm);
fz=fz/l;
fm=fm/l;
if(fm<0)
{
fm=-1*fm;
fz=-1*fz;
}


if(fz%fm!=0)
{
cout<<fz<<"z"<<fm<<"m"<<endl;
}
if(fz%fm==0)
{
cout<<fz<<"z"<<"1m"<<endl;
}
}
}

int main()
{
FS fs;
FS fens[100];
string a[100];
int n;
cin>>n;
int l,k;
for(int i=0; i<2*n; i++)
{
cin>>a[i];
int fm=0,fz=0;
int o=0;
int u=0;
for(int j=0; j<a[i].size(); j++)
{
if(a[i][0]=='-')
{
o=1;
}
if(a[i][j]=='z')
{
l=j;
if(a[i][l+1]=='-')
{
u=1;
}
}

if(a[i][j]=='m')
{
k=j;
}
}
int count1=1,count2=1;
if(o==1)
{
for(int j=l-1; j>0; j--)
{
fz+=(a[i][j]-'0')*count1;
count1*=10;
}
fz=-1*fz;
}
else
{
for(int j=l-1; j>=0; j--)
{
fz+=(a[i][j]-'0')*count1;
count1*=10;
}
}

if(fz==0)
{
fens[i].set(0,0);
}
else
{
if(u==1)
{
for(int j=k-1; j>l+1; j--)
{
fm+=(a[i][j]-'0')*count2;
count2*=10;
}
fm=-1*fm;
}
else
{
for(int j=k-1; j>l; j--)
{
fm+=(a[i][j]-'0')*count2;
count2*=10;
}
}
fens[i].set(fm,fz);
}

fs=fs+fens[i];
if((i+1)%2==0)
{
fs.display();
fs.del();
}
}

return 0;
}

posted @ 2023-05-16 09:15  不会JAVA的小袁  阅读(22)  评论(0编辑  收藏  举报