/* Name: 分数运算 Copyright: tonyee Author: tonyee Date: 19-03-09 22:23 Description: C++ 练习题 */ #include <cstdlib> #include <iostream> using namespace std; // 分数相加类 class Fract { int num; //分子 int den; // 分母 public: Fract(int a = 0, int b = 1) { num = a, den = b; } int gcd(int m, int n) { int r; if(m<n) { r = m; m = n; n = r; // 如果分子小于分母 调换位置 } while(r=m%n) // 辗转相除法求最大公约数 (求最大公约方法之一) { m=n; n=r; } return n; } Fract add(Fract f); // 将参数分数f与对象自身相加,返回约简后分数对象 void show() // 按照 num/den的形式在屏幕上显示分数 { cout << num << "/" << den << endl; } }; Fract Fract::add(Fract f) { Fract sum; sum.den = den * f.den; // 两个分数的分母相乘 sum.num = f.den * num + den * f.num; // 通分后分子的和 int x = gcd(sum.num, sum.den); // 求分子分母最大公约数 sum.num = sum.num/x; // 分子分母约分 sum.den = sum.den/x; return sum; } int main(int argc, char *argv[]) { Fract f1(1,5),f2(7,20),f3; f3 = f1.add(f2); f3.show(); system("PAUSE"); return EXIT_SUCCESS; }