zoukankan      html  css  js  c++  java
  • 【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;
    }
  • 相关阅读:
    数据库设计时间修饰词
    Tomcat手动指定jdk路径
    linux删除乱码文件[转载]
    elasticsearch简单查询
    elasticsearch批量删除(查询删除)
    elasticsearch使用Analyze API
    elasticsearch批量索引数据示例
    Elasticsearch创建索引和映射结构详解
    mysql设置服务器编码
    HBase单机模式安装
  • 原文地址:https://www.cnblogs.com/zhengkang/p/5712426.html
Copyright © 2011-2022 走看看