C++ 1034 有理数四则运算(20 分)

1:最大公约数,最小公倍数求法  参考https://blog.csdn.net/special_hg/article/details/52450073

最小公约数最简单的写法:

2: if else语句

一个 if 语句后可跟一个可选的 else if...else 语句,这可用于测试多种条件。

当使用 if...else if...else 语句时,以下几点需要注意:

  • 一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。
  • 一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
  • 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。

思路:先写一个函数来化简输入的分数   随后在主函数里面运用即可。

#include<iostream>

#include<math.h>
using namespace std;
long long int gcd(long long int t1,long long int t2){  //求最大公约数
  return t2==0? t1:gcd(t2,t1%t2);
}
int jian(long long int a,long long int b){   //判断分母是否为0
  long long int t=0,x=0;
  if(b==0){
    cout<<"Inf";
    return 0;
  }
  long long int k=gcd(abs(a),b);
  a=a/k;  //化简分数
  b=b/k;
  t=abs(a)/b;  //整数部分
  x=abs(a)-t*b;  //分子部分
 
  // if(a<0){
  //   if(t!=0&&x!=0)
  //     printf("(-%d %d/%d)",t,x,b);
  //   else if(t!=0&&x==0)
  //     printf("(-%d)",t);
  //   else if(t==0&&x!=0)
  //     printf("(-%d/%d)",x,b );
  //   else 
  //     printf("0");
  // }
  if(a<0) {
    if((t!=0)&&(x!=0))
     printf("(-%lld %lld/%lld)",t,x,b);
    if((t!=0)&&(x==0))
     printf("(-%lld)",t);
    if((t==0)&&(x!=0))
     printf("(-%lld/%lld)",x,b);
    if((t==0)&&(x==0))
      printf("0");
  }
  if(a>=0){
    if(t!=0&&x!=0)
      printf("%d %d/%d",t,x,b);
    else if(t!=0&&x==0)
      printf("%d",t);
    else if(t==0&&x!=0)
      printf("%d/%d",x,b );
    else 
      printf("0");
  }
  return 0;
}
int main(){
  long long int a1,b1,a2,b2;
  scanf("%lld/%lld",&a1,&b1);
  scanf("%lld/%lld",&a2,&b2);
  jian(a1,b1);cout<<' '<<'+'<<' ';jian(a2,b2);
  cout<<' '<<'='<<' ';jian(a1*b2+a2*b1,b1*b2);cout<<endl;
  jian(a1,b1);cout<<' '<<'-'<<' ';jian(a2,b2);
  cout<<' '<<'='<<' ';jian(a1*b2-a2*b1,b1*b2);cout<<endl;
  jian(a1,b1);cout<<' '<<'*'<<' ';jian(a2,b2);
  cout<<' '<<'='<<' ';jian(a1*a2,b1*b2);cout<<endl;
  jian(a1,b1);cout<<' '<<'/'<<' ';jian(a2,b2);
  cout<<' '<<'='<<' ';
  if(a2<0)
    jian(a1*b2*a2/abs(a2),b1*abs(a2));
  else
    jian(a1*b2,b1*a2);
  cout<<endl;
}

猜你喜欢

转载自blog.csdn.net/qq_36122764/article/details/82354968