PAT——A1088 Rational Arithmetic(分数)

博客提及PAT考试中A1088的分数算术相关题目,虽未给出具体内容,但可知围绕分数的算术运算展开,属于信息技术领域的算法题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
struct number{
    ll fz,fm;
}a,b;
ll gcd(ll a,ll b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}
number deduction(number r)
{
    if(r.fm<0)
    {
        r.fm=-r.fm;
        r.fz=-r.fz;
    }
    if(r.fz==0)
    {
        r.fm=1;
    }
    else
    {
       int d=gcd(abs(r.fz),abs(r.fm));
       r.fz/=d;
       r.fm/=d;
    }
    return r;
}
number add(number a,number b)
{
    number r;
    r.fm=a.fm*b.fm;
    r.fz=a.fz*b.fm+a.fm*b.fz;
    return deduction(r);
}
number jf(number a,number b)
{
    number r;
    r.fm=a.fm*b.fm;
    r.fz=a.fz*b.fm-a.fm*b.fz;
    return deduction(r);
}
number cf(number a,number b)
{
    number r;
    r.fm=a.fm*b.fm;
    r.fz=a.fz*b.fz;
    return deduction(r);
}
number divide(number a,number b)
{
    number r;
    r.fm=a.fm*b.fz;
    r.fz=a.fz*b.fm;
    return deduction(r);
}
void print(number r)
{
    r=deduction(r);
    if(r.fz<0)
   printf("(");
   if(r.fm==1)
   {
       printf("%lld",r.fz);
   }
   else if(abs(r.fz)>abs(r.fm))
   {
       printf("%lld %lld/%lld",r.fz/r.fm,abs(r.fz%r.fm),r.fm);
   }
   else
    printf("%lld/%lld",r.fz,r.fm);
   if(r.fz<0)
        printf(")");
}
int main()
{
   scanf("%lld/%lld %lld/%lld",&a.fz,&a.fm,&b.fz,&b.fm);
   print(a);
   printf(" + ");
   print(b);
   printf(" = ");
   print(add(a,b));
   printf("\n");//
   print(a);
   printf(" - ");
   print(b);
   printf(" = ");
   print(jf(a,b));
   printf("\n");//
   print(a);
   printf(" * ");
   print(b);
   printf(" = ");
   print(cf(a,b));
   printf("\n");//
   print(a);
   printf(" / ");
   print(b);
   printf(" = ");
   if(b.fz==0)
    printf("Inf");
   else
   print(divide(a,b));
  return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值