PAT1034. 有理数四则运算(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 //负号只可能出现在分子前
  3 //求最大公约数好算法能减少时间
  4 long long int GongYue(long long int x,long long int y)
  5 {
  6     if(x<0)
  7        x=-x;
  8     if(y<0)
  9        y=-y;
 10    long long int  m = x % y;
 11     while(m) {
 12         x = y;
 13         y = m;
 14         m = x % y;
 15     }
 16     return y;
 17 }
 18
 19 char sig[4]={
 20     ‘+‘,‘-‘,‘*‘,‘/‘
 21 };
 22 void Print(long long int a1,long long int b1)
 23 {
 24       long long     int gongyue1=GongYue(a1,b1);
 25       long long     int temp=a1/b1;
 26       if(a1==0)//0
 27            printf("0");
 28         else if(temp==0)//真分数
 29       {
 30           if(a1<0)
 31             {
 32                  printf("(%lld/%lld)",a1/gongyue1,b1/gongyue1);
 33             }
 34           else
 35              printf("%lld/%lld",a1/gongyue1,b1/gongyue1);
 36         }
 37       else  //假分数
 38       {
 39          //int te=a1;
 40          if(a1<0)
 41             a1=-a1;
 42          a1=a1/gongyue1;
 43          b1=b1/gongyue1;//可能有问题???
 44           if(temp<0&&a1%b1!=0)
 45            {
 46                 printf("(%lld %lld/%lld)",temp,a1%b1,b1);
 47            }
 48             else if(temp<0&&a1%b1==0)//整除
 49           {
 50                  printf("(%lld)",temp);
 51              }
 52              else if(temp>=0&&a1%b1==0)
 53              {
 54                     printf("%lld",temp);
 55           }
 56           else    //不整除
 57           {
 58                printf("%lld %lld/%lld",temp,a1%b1,b1);
 59           }
 60     }
 61 }
 62 int main(int argc, char *argv[])
 63 {
 64     //b1 b2 >0
 65     long long     int a1,b1,a2,b2;
 66     long long     int c1,c2;
 67     scanf("%lld/%lld %lld/%lld",&a1,&b1,&a2,&b2);
 68     //和
 69     c2=b1*b2;
 70     c1=a1*b2+a2*b1;
 71     Print(a1,b1);
 72     printf(" %c ",sig[0]);
 73     Print(a2,b2);
 74     printf(" = ");
 75     Print(c1,c2);
 76     putchar(‘\n‘);
 77     //差
 78     c2=b1*b2;
 79     c1=a1*b2-a2*b1;
 80     Print(a1,b1);
 81     printf(" %c ",sig[1]);
 82     Print(a2,b2);
 83     printf(" = ");
 84     Print(c1,c2);
 85     putchar(‘\n‘);
 86     //积
 87     c1=a1*a2;
 88     c2=b1*b2;
 89     Print(a1,b1);
 90     printf(" %c ",sig[2]);
 91     Print(a2,b2);
 92     printf(" = ");
 93     Print(c1,c2);
 94     putchar(‘\n‘);
 95     //商
 96     Print(a1,b1);
 97     printf(" %c ",sig[3]);
 98     Print(a2,b2);
 99     printf(" = ");
100     if(a2!=0)
101     {
102         //需要保证c2>0
103         c1=a1*b2;
104         c2=a2*b1;
105         if(c2<0)
106         {
107             c2=-c2;
108             c1=-c1;
109         }
110         Print(c1,c2);
111         putchar(‘\n‘);
112     }
113     else
114     {
115         printf("Inf\n");
116     }
117     return 0;
118 }

时间: 2024-10-10 08:27:10

PAT1034. 有理数四则运算(20)的相关文章

PAT1034 有理数四则运算 (20分)

1034 有理数四则运算 (20分) 本题要求编写程序,计算 2 个有理数的和.差.积.商. 输入格式: 输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0. 输出格式: 分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分:若为负数,则须加括号:

PAT乙级1034. 有理数四则运算(20)

本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分:若为负数,则须加括号:若除法分母为0,则输出“Inf”.题目保证正确的输出中没

PAT-乙级-1034. 有理数四则运算(20)

1034. 有理数四则运算(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和.差.积.商.注意输出

1034. 有理数四则运算(20)

本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照"有理数1 运算符 有理数2 = 结果"的格式顺序输出2个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式"k a/b",其中k是整数部分,a/b是最简分数部分:若为负数,则须加括号:若除法

PAT 1034. 有理数四则运算

PAT 1034. 有理数四则运算 本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照"有理数1 运算符 有理数2 = 结果"的格式顺序输出2个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式"k a/b",其中k是整数部分,a/b是最简分

结构-05. 有理数均值(20)

本题要求编写程序,计算N个有理数的平均值. 输入格式: 输入第1行给出正整数N(<=100):第2行中按照“a1/b1 a2/b2 ……”的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数:如果是负数,则负号一定出现在最前面. 输出格式: 在一行中按照“a/b”的格式输出N个有理数的平均值.注意必须是该有理数的最简分数形式,若分母为1,则只输出分子. 输入样例1: 4 1/2 1/6 3/6 -5/10 输出样例1: 1/6 输入样例2: 2 4/3 2/3 输出样例2: 1 1

5-35 有理数均值 (20分)

本题要求编写程序,计算N个有理数的平均值. 输入格式: 输入第一行给出正整数N(≤100):第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数:如果是负数,则负号一定出现在最前面. 输出格式: 在一行中按照a/b的格式输出N个有理数的平均值.注意必须是该有理数的最简分数形式,若分母为1,则只输出分子. 输入样例1: 4 1/2 1/6 3/6 -5/10 输出样例1: 1/6 输入样例2: 2 4/3 2/3 输出样例2: 1 #includ

有理数四则运算的实验报告小结

一.实验报告内容: 设计抽象数据类型有理数的描述 (有理数是其分子.分母均为整数且分母不为零的分数). 有理数主要数据运算有: 1.       构造有理数T,元素e1,e2分别被赋以分子.分母值 2.       销毁有理数T 3.       用e返回有理数T的分子或分母,i=1返回分子, i=2返回分母. 4.       改变有理数T的分子或分母为e,i=1改变分子, i=2改变分母 5.       有理数T1,T2相加,结果存入有理数T3 6.       有理数T1,T2相减,结果

PAT-B 1034. 有理数四则运算

题目内容: 本题要求编写程序,计算2个有理数的和.差.积.商. 输入格式: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0. 输出格式: 分别在4行中按照"有理数1 运算符 有理数2 = 结果"的格式顺序输出2个有理数的和.差.积.商.注意输出的每个有理数必须是该有理数的最简形式"k a/b",其中k是整数部分,a/b是最简分数部分:若为负数,则须加