zoukankan      html  css  js  c++  java
  • 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
    
     
    思路:我这里分为四个部分依次输出,写得略微复杂......
     
      1 #include<stdio.h>
      2 #include<math.h>
      3 #include<string.h>
      4 #include<stdlib.h>
      5 #define ll long long 
      6 ll int yueshu(ll int a,ll int b);
      7 ll int change(ll int a,ll int b);
      8 int main()
      9 {
     10     ll int a,b,c,d,e,f;
     11     scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d);
     12     //第一部分 
     13     change(a,b);
     14     printf(" + ");
     15     change(c,d);
     16     printf(" = ");
     17     if(a==0&&c!=0)
     18     {
     19         change(c,d);
     20         printf("
    ");
     21   }
     22   else if(a!=0&&c==0)
     23   {
     24         change(a,b);
     25         printf("
    ");
     26     }
     27     else if(a==0&&c==0)
     28     {
     29           printf("0
    ");
     30     }
     31     else
     32     {
     33           f=b*d;
     34           e=a*d+c*b;
     35           change(e,f);
     36           printf("
    ");
     37     }
     38     //第二部分
     39     change(a,b);
     40     printf(" - ");
     41     change(c,d);
     42     printf(" = ");
     43     if(c==0&&a!=0)
     44     {
     45           change(a,b);
     46           printf("
    ");
     47     }
     48     else if(a==0&&c!=0)
     49     {
     50           change(-c,d);
     51           printf("
    ");
     52     }
     53     else
     54     {
     55           f=b*d;
     56           e=a*d-c*b;
     57           change(e,f);
     58           printf("
    ");
     59     }
     60     //第三部分
     61     change(a,b);
     62     printf(" * ");
     63     change(c,d);
     64     printf(" = ");
     65     if(a==0||c==0)
     66     {
     67           printf("0
    ");
     68     }
     69     else
     70     {
     71           f=b*d;
     72           e=a*c;
     73           change(e,f);
     74           printf("
    ");
     75     }
     76     //第四部分
     77     change(a,b);
     78     printf(" / ");
     79     change(c,d);
     80     printf(" = ");
     81     if(c==0)
     82     {
     83           printf("Inf
    ");
     84     }
     85     else if(a==0)
     86     {
     87           printf("0
    ");
     88     }
     89     else
     90     {
     91           f=b*c;
     92           e=a*d;
     93         if(f<0)
     94            {
     95                 f=-f;
     96                 e=-e;
     97           }
     98           change(e,f);
     99           printf("
    ");
    100     }
    101     return 0;
    102 }
    103 ll int yueshu(ll int a,ll int b)
    104 {
    105     ll int c;
    106     c=a%b;
    107     while(c!=0)
    108     {
    109           a=b;
    110           b=c;
    111           c=a%b;
    112     }
    113     return b;
    114 }
    115 ll int change(ll int a,ll int b)
    116 {
    117     if(a==0)
    118     {
    119           printf("0");
    120     }
    121     else if(a<0)
    122     {
    123         ll int shu;
    124         ll int yue=abs(yueshu(a,b));
    125         a=a/yue;
    126         b=b/yue;
    127         shu=a/b;
    128     if(shu==0)
    129         printf("(%lld/%lld)",a,b);
    130     else
    131     {
    132         if((a-shu*b)!=0)
    133             printf("(%lld %lld/%lld)",shu,abs(a-shu*b),b);
    134         else
    135             printf("(%lld)",shu);
    136     }
    137   }
    138   else if(a>0)
    139   {
    140         ll int shu;
    141         ll int yue=abs(yueshu(a,b));
    142         a=a/yue;
    143         b=b/yue;
    144         shu=a/b;
    145     if(shu==0)
    146         printf("%lld/%lld",a,b);
    147     else
    148     {
    149         if((a-shu*b)!=0)
    150             printf("%lld %lld/%lld",shu,abs(a-shu*b),b);
    151         else
    152             printf("%lld",shu);
    153     }
    154     }
    155 }
    大佬见笑,,
  • 相关阅读:
    Java 泛型 泛型的约束与局限性
    Java 泛型 泛型方法
    Java 泛型 泛型数组
    Java 泛型 协变性、逆变性
    Java 泛型 协变式覆盖和泛型重载
    Java 泛型 泛型代码和虚拟机
    Insertion Sort List
    Remove Duplicates from Sorted List II
    String to Integer (atoi)
    SpringMvc源码入门
  • 原文地址:https://www.cnblogs.com/xwl3109377858/p/10473423.html
Copyright © 2011-2022 走看看