【1088】Rational Arithmetic (20 分)

简介: 【1088】Rational Arithmetic (20 分)【1088】Rational Arithmetic (20 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
key:求两个有理数的和差积商,注意化简的模板
有些地方要用绝对值比较,另外注意输出格式的空格
typedef long long ll;   //记ll为long long
ll gcd(ll a,ll b){    //求a与b的最大公约数
  return b== 0? a : gcd(b,a%b);
}
struct Fraction{  //分数
  ll up,down;  //分子分母
}a,b;
Fraction reduction(Fraction result){  //化简
  if(result.down <0) {  //分母为负数,令分子与分母都变为相反数
    result.up=-result.up;
    result.down=-result.down;
  }
  if(result.up == 0){  //如果分子为0
    result.down=1;   //令分母为1
  }else {             //如果分子不为0,进行约分
    int d=gcd(abs(result.up),abs(result.down));  //分子分母的最大公约数
    result.up /=d;    //约去最大公约数
    result.down /=d; 
  }
  return result;
}
Fraction add(Fraction f1,Fraction f2){         //分数f1加上分数f2
  Fraction result;
  result.up=f1.up * f2.down + f2.up * f1.down;  //分数和的分子
  result.down = f1.down * f2.down;   //分数和的分母
  return reduction(result);  //返回结果分数,注意化简
}
Fraction minu(Fraction f1,Fraction f2){   //分数f1减去分数f2
  Fraction result; 
  result.up=f1.up*f2.down-f2.up*f1.down;  //分数差的分子
  result.down=f1.down * f2.down;   //分数差的分母
  return reduction(result);               //返结果分数,注意化简
}
Fraction multi(Fraction f1,Fraction f2){  //分数f1乘以分数f2
  Fraction result; 
  result.up=f1.up*f2.up;   //分数积的分子
  result.down=f1.down*f2.down;   //分数积的分母
  return reduction(result);
}
Fraction divide(Fraction f1,Fraction f2){  //分数f1除以分数f2
  Fraction result;
  result.up=f1.up*f2.down;   //分数商的分子
  result.down=f1.down*f2.up;   //分数商的分母
  return reduction(result);
}
void showResult(Fraction r){   //输出分数r
  r=reduction(r);
  if(r.up <0) printf("(");  //负数则需要加上括号
  if(r.down ==1) printf("%lld",r.up); //整数  
  else if(abs(r.up) > r.down)   {  //假分数,注意这里要用分子的绝对值和分母比较
    printf("%lld %lld/%lld",r.up/r.down, abs(r.up)%r.down, r.down);
  }else{                                  //真分数
    printf("%lld/%lld",r.up,r.down);
  }
  if(r.up < 0)  printf(")");
}
int main(){   
  //a和b结构体在外面(结构体那边)已经定义了
  scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down); 
  //加法
  showResult(a);//注意不能直接把a原来样子输出,有假分数情况
  printf(" + ");
  showResult(b);
  printf(" = ");
  showResult(add(a,b));
  printf("\n");
  //减法
  showResult(a);//注意不能直接把a原来样子输出,有假分数情况
  printf(" - ");
  showResult(b);
  printf(" = ");
  showResult(minu(a,b));
  printf("\n");
  //乘法
  showResult(a);//注意不能直接把a原来样子输出,有假分数情况
  printf(" * ");
  showResult(b);
  printf(" = ");
  showResult(multi(a,b));
  printf("\n");
  //除法
  showResult(a);//注意不能直接把a原来样子输出,有假分数情况
  printf(" / ");
  showResult(b);
  printf(" = ");
  if(b.up == 0) printf("Inf");
  else showResult(divide(a,b));
  printf("\n");
  system("pause");
    return 0;   
}
相关文章
Julia 复数和有理数
在Julia中,复数和有理数是内置支持的数据类型。复数如`1+2im`,其中`im`代表虚数单位-i,可直接进行算术运算,如乘法、除法、加法和减法,以及幂运算。例如:`(1+2im)*(2-3im)`结果为`8+1im`。有理数也得到良好处理,允许直接使用分数形式。这些特性提供了数学表达式的直观和高效表示。
|
C++
【PAT甲级 - C++题解】1088 Rational Arithmetic
【PAT甲级 - C++题解】1088 Rational Arithmetic
47 0
|
算法
1081. Rational Sum (20)
1081. Rational Sum (20)
111 0
1081. Rational Sum (20)
|
12月前
|
前端开发 Java
java在过滤器中为http请求加请求头header
现在有一个需求场景是,每一个请求我都需要在请求头里面加上token这个请求头,作为一种校验机制,传统的接口可以通过设置一个全局的变量,然后通过页面携带过来(大概就是先将我们的token放在session中,写一个服务用来获取session中的token,然后主页面用ajax调用接口,将token放在隐藏域中,然后将请求头放进来,用ajax方法,这里不想洗说了),但是有一种情况是通过页面传递的并不一定都会适用所有接口,比如上传和下载的接口有时候头里面就没有token参数,可能是上传和下载是用表单提交的 这个时候如何将请求头通过后台的方法加进来? 想到用过滤器,用后台方法强制加入请求头。
139 0
|
应用服务中间件 nginx
解决nginx 出现 413:Request Entity Too Large
解决nginx 出现 413:Request Entity Too Large
191 0
|
人工智能 BI
CodeForces - 1485D Multiples and Power Differences (构造+lcm)
CodeForces - 1485D Multiples and Power Differences (构造+lcm)
75 0
ICPC North Central NA Contest 2018 C . Rational Ratio(结论 模拟 gcd)
ICPC North Central NA Contest 2018 C . Rational Ratio(结论 模拟 gcd)
103 0
【1081】Rational Sum (20 分)
【1081】Rational Sum (20 分) 【1081】Rational Sum (20 分)
87 0
【1059】Prime Factors (25 分)
【1059】Prime Factors (25 分) 【1059】Prime Factors (25 分)
95 0
【1129】recommendation (25分)【set 运算符重载】
【1129】recommendation (25分)【set 运算符重载】 【1129】recommendation (25分)【set 运算符重载】
87 0