zoukankan      html  css  js  c++  java
  • 分数加法运算符重载

    1、题目:

    相信同学们对复数运算符重载已经相当熟悉啦,那今天那我们来看看分数又该如何处理呢?定义一个分数类FS,有私有成员分子fz,分母fm。另有公有成员函数FS operator + (const FS &f)对运算符“+”进行重载,实现两个分数相加。题目首先给出一个整型数n,紧跟着2n行输入,输入形如3z4m,代表分子为3,分母为4。其中分母不为0,输入时分母可以为负数,但输出时分母必须为正数。 要求对分数进行两两求和,并化简。(备注说明:分数为0时,表示成0z1m,如果结果为负数,那么分子取负数,分母为正数)

    示例如下:

    输入:

    3

    4z9m

    2z9m

    4z5m

    5z4m

    2z-5m

    1z-5m

    输出:

    2z3m

    41z20m

    -3z5m

    2、代码:

    #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;
    }
  • 相关阅读:
    API协议
    执行聚合
    执行过滤
    执行查询
    介绍查询语言
    探索你的数据
    探索你的集群(翻译)
    es6.4基本概念(中文翻译)
    Python3.7.4安装
    elasticsearch常用请求
  • 原文地址:https://www.cnblogs.com/laixiaolian/p/5676562.html
Copyright © 2011-2022 走看看