【c++】有理数加法

本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:

1/3 1/6

输出样例1:

1/2

输人样例2:

4/3 2/3

输出样例2:

2

程序代码:

#include<iostream>
using namespace std;
struct fenshu
{
    int m;
    int n;
};
fenshu calc(const fenshu a,const fenshu b);
void print(fenshu a);
int main()
{
    fenshu num[2];
    fenshu ans;
    char c;
    for(int i=0;i<=1;i++)
        cin>>num[i].m>>c>>num[i].n;
    ans=calc(num[0],num[1]);
    print(ans);
return 0;
}
fenshu calc(const fenshu a,const fenshu b)
{
    fenshu ans;
    ans.m=a.m*b.n+b.m*a.n;
    ans.n =a.n*b.n;
    int i=2;
    while((i<=ans.m)&&(i<=ans.n))
    {
        if((ans.m%i==0)&&(ans.n%i==0))
            {
                ans.m=ans.m/i;
                ans.n=ans.n/i;
                i=1;
            }
        i++;
    }
    return ans;
}
void print(fenshu a)
{
    if(a.n==1)
        cout<<a.m;
        else
        cout<<a.m<<"/"<<a.n;
}

这里写图片描述

附:求最大公约数的算法

int gcd(int m, int n)   /* 求最大公约数 */
{
    int r;
    if (m == 0 && n == 0)
        return 0;
    if (m == 0)
        return n;
    if (n == 0)
        return m;
    while (1)
    {
        r = m % n;
        if (r == 0)
            break;
        m = n;
        n = r;
    }
    return n;
}
原文地址:https://www.cnblogs.com/zhengkang/p/5712426.html