zoukankan      html  css  js  c++  java
  • PAT-乙级-1034 有理数四则运算

    本题要求编写程序,计算 2 个有理数的和、差、积、商。

    输入格式:

    输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

    输出格式:

    分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。

    输入样例 1:

    2/3 -4/2
    

    输出样例 1:

    2/3 + (-2) = (-1 1/3)
    2/3 - (-2) = 2 2/3
    2/3 * (-2) = (-1 1/3)
    2/3 / (-2) = (-1/3)
    

    输入样例 2:

    5/3 0/6
    

    输出样例 2:

    1 2/3 + 0 = 1 2/3
    1 2/3 - 0 = 1 2/3
    1 2/3 * 0 = 0
    1 2/3 / 0 = Inf



    分析:
      此题是目前最麻烦的一道题
      题目思路很清洗,但代码量很大
      PS:
        注意负数加括号
        注意a/b为最简分式,需要计算gcd
        注意分母为0时结果为Inf






      1 //c++
      2 
      3 #include <iostream>
      4 using namespace std;
      5 
      6 void func(long,long,long *);
      7 void print(long *,long *,long *,char);
      8 void pri(long *);
      9 long gcd(long,long);
     10 int main(){
     11   long x,y,z,o,p,q,f1=0,f2=0;
     12   long w[4],v[4],g[4];
     13   char s1[40],s2[40];
     14   cin>>s1>>s2;
     15   
     16   long i,a=0,b=0,c=0,d=0;
     17   if(s1[0]=='-')
     18       i=1,f1=1;
     19   else
     20       i=0;
     21   for(;s1[i]!='/';i++)
     22     a=a*10+s1[i]-'0';
     23   for(i++;s1[i]!='';i++)
     24     b=b*10+s1[i]-'0';
     25   f1?a=-a:a=a;
     26   if(s2[0]=='-')
     27       i=1,f2=1;
     28   else
     29       i=0;
     30   for(;s2[i]!='/';i++)
     31     c=c*10+s2[i]-'0';
     32   for(i++;s2[i]!='';i++)
     33     d=d*10+s2[i]-'0';
     34     f2?c=-c:c=c;
     35   p=a*d;//分子乘分母 
     36   q=b*c;//分母乘分子 
     37   x=p+q;//
     38   z=p-q;//
     39   y=b*d;//分母乘 
     40   o=a*c;//分子乘
     41   func(a,b,w);
     42   func(c,d,v);
     43   func(x,y,g);
     44   print(w,v,g,'+');
     45   func(z,y,g);
     46   print(w,v,g,'-');
     47   func(o,y,g);
     48   print(w,v,g,'*');
     49   func(p,q,g);
     50   print(w,v,g,'/');
     51   return 0; 
     52 }
     53 long gcd(long a,long b){
     54     if(a==0)
     55         return 1;
     56     long c;
     57     while(a){
     58         c=b%a;
     59         b=a;
     60         a=c;
     61     } 
     62     return b;
     63 } 
     64 void func(long a,long b,long *w){//分别返回[符号整数分子分母]
     65     if(b==0){
     66         w[1]=w[2]=0;
     67         return ;
     68     }
     69     if(a<0){
     70         a=-a;
     71         if(b<0)
     72             w[0]=0,b=-b;
     73         else
     74             w[0]=1;
     75     }
     76     else{
     77         if(b<0)
     78             w[0]=1,b=-b;
     79         else
     80             w[0]=0;
     81     }
     82     w[1]=a/b;
     83     w[2]=a%b;
     84     long t=gcd(w[2],b);
     85     w[2]/=t;
     86     w[3]=b/t;
     87 }
     88 void pri(long *x){
     89     if(x[0]==1){//负数加括号 
     90         if(x[2]==0)
     91             cout<<"(-"<<x[1]<<')';
     92         else
     93             if(x[1]==0) 
     94                 cout<<"(-"<<x[2]<<'/'<<x[3]<<')';
     95             else
     96                 cout<<"(-"<<x[1]<<' '<<x[2]<<'/'<<x[3]<<')';
     97     }
     98     else{
     99         if(x[2]==0)
    100             cout<<x[1];
    101         else
    102             if(x[1]==0)
    103                 cout<<x[2]<<'/'<<x[3];
    104             else
    105                 cout<<x[1]<<' '<<x[2]<<'/'<<x[3];        
    106     }    
    107 }
    108 void print(long *x,long *y,long *z,char c){
    109     pri(x);
    110     cout<<' '<<c<<' ';
    111     pri(y);
    112     cout<<" = ";
    113     if(c=='/'&&y[1]==0&&y[2]==0)
    114         cout<<"Inf";
    115     else
    116         pri(z);
    117     cout<<endl; 
    118 }
     
  • 相关阅读:
    画图(三,进阶之绘制表盘)
    浅谈 Fork/Join
    VS中卸载Visual Assist X
    VS中显示行号
    zabbix server安装(二)
    zabbix监控的基础概念、工作原理及架构(一)
    k8s role
    如何构建 Redis 高可用架构?
    Mysqldump参数大全
    kubespray 一键安装k8s集群
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/9862176.html
Copyright © 2011-2022 走看看