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 }
    大佬见笑,,
  • 相关阅读:
    protobuf 协议 windows 下 C++ 环境搭建
    protobuf 协议 windows 下 java 环境搭建
    ProtocolBuffers (二) android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
    C++ ofstream和ifstream详细用法
    C# 关于out和ref的问题
    java 解析office文件 大全
    Ezhuang
    IOS
    Android Client and PHP Server
    一个IM开源项目LiteTalk
  • 原文地址:https://www.cnblogs.com/xwl3109377858/p/10473423.html
Copyright © 2011-2022 走看看