43.139.152.26 P2315 分数计算

从键盘读入一个分数算式,为2个分数做加法或者减法,请输出分数算式的结果,结果也用分数表达,且约分到最简形式。(请注意:做减法可能得到负的分数,如果是负数要输出负号-,如1/15-4/15结果为-1/5)(5.1.76)

输入格式

分数表达式(分数表达式中,每个分数的分子和分母都是正整数,两个分数中的运算符,可能是加号,也可能是减号,且分数表达式不含空格)

输出格式

分数表达式计算的结果

样例

输入数据 1

1/12+5/12

输出数据 1

1/2

提示

注意考虑特殊情况,如:1/2+1/2=1,1/2-1/2=0,这些情况下结果不需要表现为分数形式。

#include<bits/stdc++.h>
using namespace std;
string n , m = "" , k = "" , l , f; 
int mlenf;
int bh(string a)//把字符串转成数字
{
    int ans=0;
    for(int i=0;i<a.size();i++)
    {
        ans=ans*10+(a[i]-'0');
    }
    return ans;
}
int main(){
    getline(cin , n , '/');
    getline(cin , f , '/');
    int len = f.size();
    for(int i = 0;i < len;i++)
    {
        if(f[ i ] == '+' || f[ i ] == '-')break;

        m += f[i];

        mlenf = i;
    }
    for(int i = mlenf+2;i < len;i++)
    {
        k += f[i];
    }
    getline(cin,l,'\n');
    if(f[mlenf+1]=='-')
    {
        int z1=bh(n);
        int z2=bh(k);
        int m1=bh(m);
        int m2=bh(l);
        int y=z1*m2-z2*m1,t=m1*m2;//十字交叉
        if(y==0)cout<<"0";
        else
        {
            for(int i=10000;i!=0;i--)//约分
            {    
                if(y%i==0&&t%i==0){y/=i,t/=i;break;}
                if(t%y==0){t/=y,y=1;break;}
            }
            if(t==1)cout<<y;
            else if(t<0)cout<<'-'<<y<<"/"<<abs(t);
            else cout<<y<<"/"<<t;
        }
    }
    else
    {
        int z1=bh(n);
        int z2=bh(k);
        int m1=bh(m);
        int m2=bh(l);
        int y=z1*m2+z2*m1,t=m1*m2;
        if(y==0)cout<<"0";
        else
        {
            for(int i=10000;i!=0;i--)
            {    
                if(y%i==0&&t%i==0){y/=i,t/=i;break;}
                if(t%y==0){t/=y,y=1;break;}
            }
            if(t==1)cout<<y;
            else if(t<0)cout<<'-'<<y<<"/"<<abs(t);
            else cout<<y<<"/"<<t;
        }
    }
    return 0;
}

相关推荐

  1. 43.139.152.26 P2315 分数计算

    2024-06-18 15:58:05       31 阅读
  2. 洛谷 P6974 [NEERC2015] Adjustment Office 题解

    2024-06-18 15:58:05       66 阅读
  3. C++:[NWRRC2015] Concatenation(洛谷)P7050

    2024-06-18 15:58:05       43 阅读
  4. P2678 [NOIP2015 提高组] 跳石头

    2024-06-18 15:58:05       38 阅读
  5. P2678 [NOIP2015 提高组] 跳石头

    2024-06-18 15:58:05       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 15:58:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 15:58:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 15:58:05       82 阅读
  4. Python语言-面向对象

    2024-06-18 15:58:05       91 阅读

热门阅读

  1. 银河粒子InsCode

    2024-06-18 15:58:05       31 阅读
  2. 机器学习专题记录

    2024-06-18 15:58:05       28 阅读
  3. 【机器学习】klearn基础教程

    2024-06-18 15:58:05       36 阅读
  4. Mysql 分表存储、多段存储

    2024-06-18 15:58:05       27 阅读
  5. PaddleDetection快速体验quick_start

    2024-06-18 15:58:05       34 阅读
  6. MySQL触发器基本结构

    2024-06-18 15:58:05       26 阅读
  7. 微服务项目雪崩的解决思路

    2024-06-18 15:58:05       21 阅读
  8. 通用大模型VS垂直大模型,你更青睐哪一方?

    2024-06-18 15:58:05       26 阅读
  9. 掌握数据提取与治理:构建数据驱动决策的基础

    2024-06-18 15:58:05       31 阅读
  10. vue3+wangeditor实现富文本

    2024-06-18 15:58:05       42 阅读