zoukankan      html  css  js  c++  java
  • PAT 1034. 有理数四则运算(20)

    本题要求编写程序,计算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<string.h>
     3 #include<stdlib.h>
     4 #include<ctype.h>
     5 #include<math.h>
     6 void simp(long *a,long *b){
     7     long temp,temp1,temp2;
     8     temp = *a;
     9     temp1 = *b;
    10     while(temp1){
    11         temp2 = temp%temp1;
    12         temp = temp1;
    13         temp1 = temp2;
    14     }
    15     *a = *a/temp;
    16     *b = *b/temp;
    17 }
    18 
    19 void print(long a,long a1){
    20     long ka = a/a1;
    21     a = a%a1;
    22     if(a<0||a1<0||ka<0)
    23         printf("(");
    24     if(a==0)
    25         printf("%ld",ka);
    26     else if(ka!=0)
    27         printf("%ld %ld/%ld",ka,abs(a),abs(a1));
    28     else{
    29         if(a1<0){
    30             a = -a;
    31             a1 = -a1;
    32         }
    33         printf("%ld/%ld",a,a1);
    34     }
    35         
    36     if((a<0||a1<0||ka<0))
    37         printf(")");
    38         
    39 }
    40 
    41 void print1(long a,long a1,long b,long b1,long c,long c1,char k){
    42     simp(&c,&c1);
    43     print(a,a1);
    44     printf(" %c ",k);
    45     print(b,b1);
    46     printf(" = ");
    47     print(c,c1);
    48     printf("
    ");
    49 }
    50 
    51 int main(){
    52     long a,a1,b,b1;
    53     long c[5][2];
    54     char sign[5]={'+','-','*','/'};
    55     scanf("%ld/%ld",&a,&a1);
    56     scanf("%ld/%ld",&b,&b1);
    57     
    58     simp(&a,&a1);
    59     simp(&b,&b1);
    60     
    61     c[0][1] = b1*a1;
    62     c[0][0] = a*b1+b*a1;
    63     c[1][1] = b1*a1;
    64     c[1][0] = a*b1-b*a1;
    65     c[2][1] = b1*a1;
    66     c[2][0] = a*b;
    67     c[3][1] = a1*b;
    68     c[3][0] = a*b1;
    69     
    70     for(int i=0;i<3;i++){
    71         print1(a,a1,b,b1,c[i][0],c[i][1],sign[i]);
    72     }
    73     
    74     if(b==0){
    75         print(a,a1);
    76         printf(" / ");
    77         print(b,b1);
    78         printf(" = ");
    79         printf("Inf");
    80         return 0;
    81     }else{
    82         print1(a,a1,b,b1,c[3][0],c[3][1],sign[3]);
    83     }     
    84 }
  • 相关阅读:
    【转】 java中Class对象详解和类名.class, class.forName(), getClass()区别
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    107. Binary Tree Level Order Traversal II
    109. Convert Sorted List to Binary Search Tree
    108. Convert Sorted Array to Binary Search Tree
    110. Balanced Binary Tree
    STL容器迭代器失效问题讨论
    113. Path Sum II
    112. Path Sum
  • 原文地址:https://www.cnblogs.com/lolybj/p/6225769.html
Copyright © 2011-2022 走看看