Problem B: 分数类的类型转换
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 2403 Solved: 1822
[ Submit][ Status][ Web Board]
Description
封装一个分数类Fract,用来处理分数功能和运算,支持以下操作:
1. 构造:传入两个参数n和m,表示n/m;分数在构造时立即转化成最简分数。
2. show()函数:分数输出为“a/b”或“-a/b”的形式,a、b都是无符号整数。若a为0或b为1,只输出符号和分子,不输出“/”和分母。
3. double类型转换函数:用分子除以分母,得到的小数。注意:分子为0时不要输出为“-0”
-----------------------------------------------------------------------------
你设计一个Fract类,使得main()函数能够运行并得到正确的输出。调用格式见append.cc
Input
输入多行,每行两个整数,分别为分子和分母,至EOF结束。输入的分母不会为0;
Output
每行输出一个实数和分数,与输入顺序一致。实数为分子除以分母所得。
分数输出时为最简形式,负号只会出现在最前面,若分母为1或分子为0,则只输出一个整数,即分子部分,而没有“/”和分母部分。
Sample Input
1 320 -1580 150-9 16 612 16-33 -486 110 -10
Sample Output
0.333333 1/3-1.33333 -4/30.533333 8/15-9 -91 10.75 3/40.6875 11/160.545455 6/110 0
HINT
Append Code
- #include <iostream>
- #include <cmath>
- using namespace std;
- class Fract{
- private:
- int m,n;double c;
- public:
- Fract(int a,int b):m(a),n(b){
- int nn=m>n?n:m;
- int mm=m>n?m:n;
- int t;
- if(nn>0){
- for(int i=1;i<=nn;i++){
- if(nn%i==0&&mm%i==0)
- t=i;
- }
- }
- else if(nn<0){
- for(int i=-1;i>=nn;i--){
- if(nn%i==0&&mm%i==0)
- t=-i;
- }
- }
- if(n<0){
- m=-m;n=-n;
- }
- if(t!=1){
- m=m/t;
- n=n/t;
- }
- }
- operator double(){
- return (double)m/n;
- }
- void show(){
- if(m== 0||n==1){
- cout<<m<<endl;
- }
- else{ cout<<m<<"/"<<n<<endl; }
- }
- };
- int main()
- {
- int n, m;
- while(cin >> n >> m)
- {
- Fract fr(n, m);
- cout << (double)fr << " ";
- fr.show();
- }
- }