實驗11:Problem B: 分數類的類型轉換,11problem
Home
Web Board
ProblemSet
Standing
Status
Statistics
Problem B: 分數類的類型轉換
Problem B: 分數類的類型轉換
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 579 Solved: 431
[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 -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]
한국어<
中文
فارسی
English
ไทย
All Copyright Reserved 2010-2011 SDUSTOJ TEAM
GPL2.0 2003-2011 HUSTOJ Project TEAM
Anything about the Problems, Please Contact Admin:admin
#include<iostream>
#include<cstdio>
using namespace std;
int cccc(int a,int b){
if(!b)
return a;
return cccc(b,a%b);
}
class Fract{
public:
int n,m;
Fract(int a,int b):n(a),m(b)
{
int Max,Min,c,x,y;
if(a<0) a*=-1;
if(b<0) b*=-1;
c=cccc(max(a,b),min(a,b));
if(m<0)
{
n*=-1;
m*=-1;
}
if(c!=1)
{
n/=c;
m/=c;
}
}
void show()
{
if(n==0||m==1)
cout<<n<<endl;
else
{
cout<<n<<"/"<<m<<endl;
}
}
operator double()
{
return (double)n/m;
}
};
int main()
{
int n, m;
while(cin >> n >> m)
{
Fract fr(n, m);
cout << (double)fr << " ";
fr.show();
}
}