/* * 程序的版权和版本声明部分 * 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; } 运行结果: