[問題] 分數約分的問題

看板C_and_CPP (C/C++)作者 (老馮)時間16年前 (2009/05/12 09:17), 編輯推噓3(303)
留言6則, 4人參與, 最新討論串1/1
詢問板友一個問題 下面是設計一個有關"隨機產生五個分數總加"的程式碼 (分數分母皆小於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

05/12 10:11, , 1F
問一下你怎麼上色的xd
05/12 10:11, 1F

05/12 10:16, , 2F
05/12 10:16, 2F

05/12 11:12, , 3F
想睡覺= =就求出GCD之後 要輸出之前在除GCD不就好了??
05/12 11:12, 3F

05/12 11:24, , 4F
不過分數連續運算時, 可能兩兩算完就得先約分一次, 這樣
05/12 11:24, 4F

05/12 11:24, , 5F
做效率會差一些, 但是算到分子或分母先爆掉的機會少一些
05/12 11:24, 5F

05/12 11:26, , 6F
啊~~沒注意到分子分母都小於20, 那應該就沒什麼差別了:)
05/12 11:26, 6F
文章代碼(AID): #1A2CuJyZ (C_and_CPP)
文章代碼(AID): #1A2CuJyZ (C_and_CPP)