团体程序设计天梯赛 L1-009. N个数求和

易错题

 1 #include <stdio.h> 
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <stdbool.h>
 5 
 6 long long gcd(long long a,long long b)
 7 {
 8     long c;
 9     while (b!=0)
10     {
11         c=a%b;
12         a=b;
13         b=c;
14     }
15     return a;
16 }
17 
18 int main()
19 {
20     char str[100];
21     long n,i,j,k;
22     long long a,b=-1,c,d,e;
23     scanf("%ld",&n);
24     while (n)
25     {
26         n--;
27         scanf("%s",str);
28         if (str[0]=='-')
29             j=1;
30         else
31             j=0;
32         for (i=j;i<strlen(str);i++)
33             if (str[i]=='/')
34                 break;
35         c=0;
36         d=0;
37         for (k=j;k<i;k++)
38             c=c*10+str[k]-48;
39         for (k=i+1;k<strlen(str);k++)
40             d=d*10+str[k]-48;
41             
42         e=gcd(c,d);
43         c=c/e;
44         d=d/e;
45                     
46         if (b==-1)
47         {
48             a=c;
49             b=d;
50             if (j==1)
51                 a=-a;
52             continue;
53         }
54         
55         if (j==1)
56             c=-c;
57         e=b*d/gcd(b,d);
58         a=e/b*a+e/d*c;
59         b=e;
60         
61         e=gcd(abs(a),b);
62         a=a/e;
63         b=b/e;
64     }
65     if (a<0)
66     {
67         printf("-");
68         a=-a;
69     }
70     
71     c=a/b;
72     d=a%b;
73     if (c==0 && d==0)
74         printf("0");
75     else if (c==0 && d!=0)
76         printf("%lld/%lld",d,b);
77     else if (c!=0 && d==0)
78         printf("%lld",c);
79     else
80         printf("%lld %lld/%lld",c,d,b);
81     return 0;
82 }

 

posted @ 2018-03-15 16:52  congmingyige  阅读(215)  评论(1编辑  收藏  举报