团体程序设计天梯赛 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 }