#include<stdio.h>
#include<math.h>
int gcd(long int a, long int b);//取兩個數最大公約數(輾轉相除法)
int main()
{
int n; scanf("%d", &n);
int fz = 0, fm = 1;
long pub = 0, whole = 0;
long int a, b;
int flag = 0;
while (n--) {
scanf("%ld/%ld", &a, &b);
fz = fz * b + a * fm;
fm *= b;
pub=gcd(abs(fz), abs(fm));
fz /= pub;
fm /= pub;
}
if (fz && fz / fm == 0) {
printf("%d/%d", fz, fm);
return 0;
}
else if (fz % fm == 0) {
printf("%d", fz / fm);
return 0;
}
else {
printf("%d %d/%d", fz / fm, fz % fm, fm);
}
}
int gcd(long int a, long int b) {
if (b == 0)
return a;
int c = a % b;
return gcd(b, c);
}
本題思路就是沒兩個數相加,然後化簡再加下一個數,這樣一來可以防止數值過大而無法儲存
此外,本題也用到了輾轉相除法,不清楚的同學可以去自行瞭解一下啊。
如有錯誤歡迎指正!