Problem F: 分數類的類型轉換
阿新 • • 發佈:2017-05-05
處理 都是 mas show urn 現在 輸入 names 註意
[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 3 20 -15 80 150 -9 1 6 6 12 16 -33 -48 6 11 0 -10Sample 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 0HINT
Append Code
append.c, append.cc,#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: 分數類的類型轉換