作者johnfyj (老馮)
看板C_and_CPP
標題[問題] 分數約分的問題
時間Tue May 12 09:17:06 2009
詢問板友一個問題
下面是設計一個有關"隨機產生五個分數總加"的程式碼
(分數分母皆小於20) 但是輸出的分數並不會約分
所以請強者可以幫我看一下程式碼 要在哪裡加入約分的程式碼
好像是gcd 還是 Easiest 等等的 我有試過加進入還是一樣宣告錯誤
所以...拜託您了 謝謝
#include<iostream>
#include<time.h>
#include<vector>
#include<algorithm>
#define randomize() srand((unsigned)time(NULL))
using namespace std;
//定義分數類別
class Fraction{
public:
unsigned numerator;
unsigned denominator;
Fraction(){
do{
numerator = rand()%20;
denominator = rand()%20;
}while(denominator == 0 || numerator == 0);//分子分母不為0
}
Fraction operator +(Fraction f2);
bool operator >( Fraction f2);
};
//過載分數 + 運算子
Fraction Fraction::operator +(Fraction f2){
Fraction f;
unsigned a,b,c;
a = this->numerator*f2.denominator;
b = f2.numerator*this->denominator;
c = this->denominator*f2.denominator;
f.numerator=a+b;
f.denominator=c;
return f;
}
//定義產生物件的樣本函數
template<class T>
T NewElement(){
T ob;
return ob;
}
//定義加法樣本函數
template<class T>
T Add(T& ob1,T& ob2){
T ob;
ob = ob1 + ob2;
return ob;
}
//自訂函數物件樣本
template<class T>
struct large
{
bool operator()(T f1, T f2)const {
return f1 > f2;
}
};
const unsigned data_num = 5; //宣告資料數
//主程式
int main()
{
randomize();
vector<Fraction> F; //宣告分數型態的容器
for(int i=0; i<data_num; i++){
F.push_back(NewElement<Fraction>());//產生5個分數物件並且輸入容器
}
Fraction F_sum;
F_sum=F[0];
//加總分數
for(int i=1; i<data_num; i++)
F_sum = Add<Fraction>(F_sum, F[i]);
cout<<"分數和 ="<<F_sum.numerator<<"/"<<F_sum.denominator;
cout<<endl<<endl;
system("pause");
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 134.208.32.118
1F:推 po953:問一下你怎麼上色的xd 05/12 10:11
3F:推 sosokill:想睡覺= =就求出GCD之後 要輸出之前在除GCD不就好了?? 05/12 11:12
4F:推 VictorTom:不過分數連續運算時, 可能兩兩算完就得先約分一次, 這樣 05/12 11:24
5F:→ VictorTom:做效率會差一些, 但是算到分子或分母先爆掉的機會少一些 05/12 11:24
6F:→ VictorTom:啊~~沒注意到分子分母都小於20, 那應該就沒什麼差別了:) 05/12 11:26