作者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