• 5_2分数的各种运算


    /*
    * 程序的版权和版本声明部分
    * Copyright (c)2012, 烟台大学计算机学院学生
    * All rightsreserved.
    * 文件名称: object.cpp
    * 作者:纪子龙
    * 完成日期: 2013年3  月 21 日
    * 版本号: v1.0
    * 输入描述:无
    * 问题描述:无
    * 程序输出:无
    */
    #include <iostream>
    using namespace std;
    class CFraction
    {
    private:
    	int nume;  // 分子
    	int deno;  // 分母
    public:
    	void input();				//按照"nu/de"的格式,如"5/2"的形式输入
    	void simplify();				//化简(使分子分母没有公因子)
    	void amplify(int n);			//放大n倍,如2/3放大5倍为10/3
    	void output(int style=0);		//输出:以8/6为例,style为0时,原样输出8/6;
    	//style为1时,输出化简后形式4/3;
    	//style为2时,输出1(1/3)形式,表示一又三分之一;
    	//style为3时,用小数形式输出,如1.3333;
    	//不给出参数和非1、2,认为是方式0
    };
    void CFraction::input()					//按照"nu/de"的格式,如"5/2"的形式输入
    {
    	
    	cout<<"please input nume deno"<<endl;
    	cin>>nume>>deno;
    }
    void CFraction::simplify()				//化简(使分子分母没有公因子)
    {
    	int a,b,c,d;
    	int num1,num2,temp;				
    	num1=nume;
    	num2=deno;
    	c=nume;
    	d=deno;
    	if(num1>num2) /*找出两个数中的较大值*/
    	{
    		temp=num1; num1=num2; num2=temp; /*交换两个整数*/
    	}
    	a=num1; b=num2;
    	while(b!=0) /*采用辗转相除法求最大公约数*/
    	{
    		temp=a%b;
    		a=b;
    		b=temp;
    	}
    	c=c/a;
    	d=d/a;
    	cout<<c<<"/"<<d<<endl;
    }
    void CFraction::amplify(int n)			//放大n倍,如2/3放大5倍为10/3
    {
    	int a,b;				
    	a=nume;
    	b=deno;
    	a=a*n;
    	b=b*n;
    	cout<<a<<"/"<<b<<endl;
    }
    void CFraction::output(int style)
    {
    	if(style==3)
    	{
    		int a,b,e,t,i,c=3; 
    		a=nume;
    		b=deno;
    		if (a>b)   
    		{
    			cout<<a/b<<".";  
    			for (i=1;i<c+1;i++)  
    			{    
    				t=a*10/b;   
    				e=a%b;     
    				a=e;    
    				cout<<t; 
    			}
    		}    
    			cout<<endl;    
    		if (a<b)    
    		{
    			cout<<"0.";   
    			for (i=1;i<c+1;i++)   
    			{   
    				t=a*10/b;   
    				e=a%b;    
    				a=e;   
    				cout<<t;      
    			}    
    			cout<<endl;  
    		}   
    	}
    else
    {
    	if(style==2)
    	{
    		int a,b,c=0;
    		a=nume;
    		b=deno;
    		while(a>=b)
    		{
    			a=a-b;
    			c++;
    		}
    		
    		if(a==0)
    			cout<<c<<endl;
    		else
    			cout<<c<<"("<<a<<"/"<<b<<")"<<endl;
    	}
    	else
    	{
    		if(style==1)
    		{
    			int a,b,c,d;
    			int num1,num2,temp;				
    			num1=nume;
    			num2=deno;
    			c=nume;
    			d=deno;
    			if(num1>num2) /*找出两个数中的较大值*/
    			{
    				temp=num1; num1=num2; num2=temp; /*交换两个整数*/
    			}
    			a=num1; b=num2;
    			while(b!=0) /*采用辗转相除法求最大公约数*/
    			{
    				temp=a%b;
    				a=b;
    				b=temp;
    			}
    			c=c/a;
    			d=d/a;
    			cout<<c<<"/"<<d<<endl;
    		}
    		else
    		{
    			cout<<nume<<"/"<<deno<<endl;
    		}
    	}
    }		
    }
    int main()
    {
    	CFraction num1;
    	num1.input();
    	num1.amplify(3);
    	num1.simplify();
    	num1.output(1);
    	num1.output(2);
    	num1.output(3);
    	num1.output(0);
    	return 0;
    }
    运行结果:


  • 相关阅读:
    js实现深拷贝的几种方法
    禁止浏览器的默认行为 图片拖动 复制 剪切 右击
    祈祷奇迹,其实不如无尽的练习
    洛谷P4643 [国家集训队]阿狸和桃子的游戏 & 初赛心情
    Re:prime 关于质数的算法
    【洛谷有题】NOIP 2014 提高组初赛试题 订正 网络协议 检索/比较次数计算
    补码的快速计算
    2020洛谷初赛模拟 订正
    【洛谷有题】NOI 笔试题库(非初赛)订正
    树状数组小结
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/2988750.html
Copyright © 2020-2023  润新知