码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-01-20 13:41:51      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

本题要求编写程序,计算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 }
View Code

 

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

标签:

原文地址:http://www.cnblogs.com/GoFly/p/4235799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!