对分数求加减乘除,以及化简
#include<iostream> #include<math.h> using namespace std; struct Fraction{ long up,down; }; //求分子分母的最大公约数 int gcb(int a,int b) { if(b==0) return a; else return gcb(b,a%b); } //化简 Fraction reduction(Fraction &result) { if(result.down < 0) //分母为负 { result.down = -result.down; result.up = - result.up; } else if(result.up == 0) //分母为0 result.down = 1; else { int x = gcb(abs(result.up),abs(result.down)); //分子分母同时除最大公约数 result.up /= x; result.down /= x; } return result; } //加法 Fraction Add(Fraction a,Fraction b) { Fraction c; c.up = a.up * b.down + a.down * b.up; c.down = a.down * b.down; return reduction(c); } //减法 Fraction minu(Fraction a,Fraction b) { Fraction c; c.up = a.up * b.down - a.down * b.up; c.down = a.down * b.down; return reduction(c); } //乘法 Fraction multi(Fraction a,Fraction b) { Fraction c; c.up = a.up * b.up; c.down = a.down * b.down; return reduction(c); } //除法 Fraction divide(Fraction a,Fraction b) { Fraction c; c.up = a.up * b.down; c.down = a.down * b.up; return reduction(c); } void showresult(Fraction result) { if(result.down == 1) cout<<result.up<<endl; else if(abs(result.up)>abs(result.down)) cout<<result.up /result.down <<" "<<abs(result.up % result.down)<<"/"<<result.down<<endl; else cout<<result.up<<"/"<<result.down<<endl; } int main() { Fraction f1,f2; while(cin>>f1.up>>f1.down>>f2.up>>f2.down) { showresult(Add(f1,f2)); showresult(minu(f1,f2)); showresult(multi(f1,f2)); showresult(divide(f1,f2)); } return 0; }
原文链接: https://www.cnblogs.com/ttzz/p/10573483.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/291873
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!