5.3.1分数的表示和化简
#include<iostream>
#include<cmath>
using namespace std;
struct Fraction{
int up,down;
};
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
//分数规范化 化简
void reduction(Fraction& result){
if(result.down<0){//规定分母必须为正数
result.down=-result.down;
result.up=-result.up;
}
if(result.up==0){//分子为0时分母为1
result.down=1;
}else{
int d=gcd(abs(result.down),abs(result.up));
result.down/=d;
result.up/=d;
}
}
void showFra(Fraction a){
cout<<a.up<<"/"<<a.down<<endl;
}
int main(){
int m,n;
Fraction fra;
while(cin>>fra.up>>fra.down){
reduction(fra);
showFra(fra);
}
return 0;
}
分数的四则运算以及输出
#include<iostream>
#include<cmath>
using namespace std;
struct Fraction{
int up,down;
};
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
//分数规范化 化简
void reduction(Fraction& result){
if(result.down<0){//规定分母必须为正数
result.down=-result.down;
result.up=-result.up;
}
if(result.up==0){//分子为0时分母为1
result.down=1;
}else{
int d=gcd(abs(result.down),abs(result.up));
result.down/=d;
result.up/=d;
}
}
//分数加法
Fraction add(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.down*f2.up+f1.up*f2.down;
result.down=f1.down*f2.down;
reduction(result);
return result;
}
//分数减法
Fraction minu(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down-f2.up*f1.down;
result.down=f1.down*f2.down;
reduction(result);
return result;
}
//分数乘法
Fraction multi(Fraction f1,Fraction f2){
Fraction result;
result.up=f2.up*f1.up;
result.down=f1.down*f2.down;
reduction(result);
return result;
}
//分数除法
Fraction divide(Fraction f1,Fraction f2){
Fraction result;
result.up=f1.up*f2.down;
result.down=f1.down*f2.up;
reduction(result);
return result;
}
//分数输出
void showResult(Fraction r){
reduction(r);
if(r.down==1){//整数
cout<<r.up;
}else if(abs(r.up)>r.down){//分母一定正数 假分数以带分数形式输出
cout<<r.up/r.down<<" "<<abs(r.up)%r.down<<"/"<<r.down;
}else{
cout<<r.up<<"/"<<r.down;
}
cout<<endl;
}
int main(){
int m,n;
Fraction f1,f2,result;
f1.up=10;f1.down=-15;
f2.up=-20;f2.down=-25;
cout<<"加:";showResult(add(f1,f2));
cout<<"减:";showResult(minu(f1,f2));
cout<<"乘:";showResult(multi(f1,f2));
cout<<"除:";showResult(divide(f1,f2));
return 0;
}