1. 程式人生 > >Problem F: 分數類的類型轉換

Problem F: 分數類的類型轉換

處理 都是 mas show urn 現在 輸入 names 註意

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 3 20 -15 80 150 -9 1 6 6 12 16 -33 -48 6 11 0 -10

Sample Output

0.333333 1/3 -1.33333 -4/3 0.533333 8/15 -9 -9 1 1 0.75 3/4 0.6875 11/16 0.545455 6/11 0 0

HINT

Append Code

append.c, append.cc,
[Submit][Status][Web Board]
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
class Fract
{
public:
    int n,m;
    Fract(int a=0,int b=0):n(a),m(b){}
    void show()
    {
        int t=gcd(n,m);
        int x=n/t;
        int y=m/t;
        if(x==0||y==1)
            cout<<x<<endl;
        else
        {
            if(x*y<0)
                cout<<"-"<<abs(x)<<"/"<<abs(y)<<endl;
            else
                cout<<abs(x)<<"/"<<abs(y)<<endl;
        }
    }
    operator double ()
    {
        if(n==0)
            return (double)0;
        else
            return (double)n/m;
    }
};
int main()
{
    int n, m;
    while(cin >> n >> m)
    {
        Fract fr(n, m);
        cout << (double)fr << " ";
        fr.show();
    }
}

  

Problem F: 分數類的類型轉換