PAT (Basic Level) Practice (中文)- 1034 有理数四则运算(20 分)

简介: PAT (Basic Level) Practice (中文)- 1034 有理数四则运算(20 分)

题目链接:点击打开链接

题目大意:略。

解题思路:


1、sprintf 妙用,省了很多次的判断。

2、中间过程可能会 long long。

AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
string s1,s2,s3;
char c[100];
stringstream ss;
ll a3,b3,a4,b4,a5,b5,t,tt,k;
ll gcd(ll a,ll b){ a=a<0?-a:a; b=b<0?-b:b; return a==0?b:gcd(b%a,a); }
string fun(ll a,ll b)
{
    string s;
    k=0;
    ss.clear(); ss.str("");
    if(abs(a)>=b)
    {
        if(b==1)
        {
            k=a;
            ss<<k; ss>>c;
        }
        else
        {
            k=a/b, a=abs(k*b-a);
            sprintf(c,"%lld %lld/%lld",k,a,b);
        }
    }
    else
    {
        if(a==0) c[0]='0',c[1]='\0';
        else sprintf(c,"%lld/%lld",a,b);
    }
    s=c;
    if(k<0 || a<0) s="("+s+")";
    return s;
}
int main()
{
    ll a1,b1,a2,b2;
    while(~scanf("%lld/%lld%lld/%lld",&a1,&b1,&a2,&b2))
    {
        t=gcd(a1,b1);
        a1/=t, b1/=t;
        t=gcd(a2,b2);
        a2/=t, b2/=t;
        a3=a1, b3=b1, a4=a2, b4=b2;
        s1=fun(a3,b3); s2=fun(a4,b4);
        t=b1*b2/gcd(b1,b2);
        a1*=t/b1, a2*=t/b2;
        // 以上全是公共的
        a5=a1+a2, b5=t;
        tt=gcd(a5,b5);
        a5/=tt, b5/=tt;
        s3=fun(a5,b5);
        printf("%s %c %s = %s\n",s1.c_str(),'+',s2.c_str(),s3.c_str());
        a5=a1-a2, b5=t;
        tt=gcd(a5,b5);
        a5/=tt, b5/=tt;
        s3=fun(a5,b5);
        printf("%s %c %s = %s\n",s1.c_str(),'-',s2.c_str(),s3.c_str());
        a5=a3*a4, b5=b3*b4;
        tt=gcd(a5,b5);
        a5/=tt, b5/=tt;
        s3=fun(a5,b5);
        printf("%s %c %s = %s\n",s1.c_str(),'*',s2.c_str(),s3.c_str());
        if(a4==0) printf("%s %c %s = Inf\n",s1.c_str(),'/',s2.c_str());
        else
        {
            a5=abs(a3)*b4, b5=abs(a4)*b3;
            tt=gcd(a5,b5);
            a5/=tt, b5/=tt;
            if(a3*a4>=0) s3=fun(a5,b5);
            else s3=fun(-a5,b5);
            printf("%s %c %s = %s\n",s1.c_str(),'/',s2.c_str(),s3.c_str());
        }
    }
    return 0;
}
目录
相关文章
|
6月前
|
机器学习/深度学习 负载均衡 网络架构
Mixture of Experts架构的简要解析
Mixture of Experts(MoE)架构起源于1991年,其核心思想是通过多个专门化的“专家”网络处理输入的不同部分,并由门控网络动态组合输出。这种架构实现了稀疏激活,仅激活部分专家,从而在模型规模与计算成本之间取得平衡。MoE的关键在于门控机制的设计,如线性门控、噪声Top-K门控等,确保模型能根据输入特征自适应选择专家。
764 8
|
安全 网络协议 Linux
内网穿透工具Frp
【10月更文挑战第6天】内网穿透工具Frp
1836 67
|
9月前
|
数据采集 存储 Web App开发
多线程爬虫优化:快速爬取并写入CSV
多线程爬虫优化:快速爬取并写入CSV
|
编解码 Ubuntu 算法
Ubuntu桌面图标指南:一文了解如果设置ubuntu 软件图标
Ubuntu桌面图标指南:一文了解如果设置ubuntu 软件图标
4386 0
|
前端开发 JavaScript 数据挖掘
浅谈游戏地图中位置实时更新的技术方案
浅谈游戏地图中位置实时更新的技术方案
523 1
|
Linux C#
阿里云域名收费标准(com/cn等不同后缀价格表)
阿里云域名收费标准包括com、cn等不同域名后缀,域名注册价格、域名续费价格和域名转入价格
23502 0
|
Oracle 关系型数据库 数据库
|
机器学习/深度学习 存储 人工智能
Intel带你初识视觉识别--OpenVINO(一)
了解人工智能和OpenVINO的工具套件,为AI应用选择最佳的Intel平台,并使用Intel产品构建AI应用
635 0
Intel带你初识视觉识别--OpenVINO(一)

热门文章

最新文章