【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;
}
全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务