zoukankan      html  css  js  c++  java
  • 南阳理工111---分数加减法

    分数加减法

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:2
     
    描述
    编写一个C程序,实现两个分数的加减法
     
    输入
    输入包含多行数据 
    每行数据是一个字符串,格式是"a/boc/d"。 
    其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 

    数据以EOF结束 
    输入数据保证合法
    输出
    对于输入数据的每一行输出两个分数的运算结果。 
    注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
    样例输入
    1/8+3/8
    1/4-1/2
    1/3-1/3
    样例输出
    1/2
    -1/4
    0
    来源
    水题比赛
    上传者
    hzyqazasdf
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    int gcd(int a,int b)
    {
        if(b==0) return a;
        return gcd(b,a%b);
    }
    int main()
    {
        char c1,c2,c3;
        int a,b,c,d;
        while(cin>>a>>c1>>b>>c2>>c>>c3>>d)
        {
           int t=gcd(b,d);
            int b1=b*d/t;           //约分的分母
           a=a*(b1/b);c=c*(b1/d);   //分子
        if(c2=='+')
            {
                if(b==1&&d==1)      //整数处理
                cout<<a+c<<endl;
                else if(a+c==0)     //如果相加后为0
                    cout<<0<<endl;
                else
                {
                a=a+c;
                int t1=gcd(a,b1);
                if(b1/t1==1)          //如果后来的分数中分母为1
                     cout<<a/t1<<endl;
                else
                    cout<<a/t1<<"/"<<b1/t1<<endl;
                }
            }
          else if(c2=='-'&&a>=c)
           {
               a=a-c;
               if(a==0)
                cout<<0<<endl;
                else  if(b==1&&d==1)
                cout<<a<<endl;
               else
               {
                int t2=gcd(a,b1);
                if(b1/t2==1)
                    cout<<a/t2<<endl;
                else
                    cout<<a/t2<<"/"<<b1/t2<<endl;
               }
           }
           else if(c2=='-'&&a<c)
           {
               if(b==1&&d==1)
                cout<<a-c<<endl;
            else
              {
                a=c-a;
               int t3=gcd(a,b1);
               if(b1/t3==1)
                cout<<"-"<<a/t3<<endl;
               else
                cout<<"-"<<a/t3<<"/"<<b1/t3<<endl;
              }
           }
        }
        return 0;
    }
    

      

  • 相关阅读:
    redis运维手册
    grafana展示ES中的nginx日志-地图展示
    nginx针对yum安装nginx重编译
    K8S-yaml里初始化容器
    K8S-资源配置清单补充1
    K8S-资源配置清单详解
    Docker cp 提示“no space left on device”
    磁盘
    ansible 对文件内容的操作
    ansible 初始化系统分区格式化
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4250655.html
Copyright © 2011-2022 走看看