// a>b; 但 不需要 若a>b则gcd(a,b) a<b则gcd(b,a)
int gcd(int a,int b){
if(b == 0) return a;
else return gcd(b,a%b);
}
其中d为a和b的最大公约数
最小公倍数 为ab/d 但是其有溢出的风险 所以应该改变下运算顺序 a/db 由于d是a和b的最大公约数 所以a/d 一定是可以整除的
1081 Rational Sum (20 分)
https://pintia.cn/problem-sets/994805342720868352/problems/994805386161274880
int a=0,b=1;
while(n--){
int c,d;
scanf("%d/%d",&c,&d);
a = a*d+b*c;
b = b*d;
int t = gcd(a,b);
a /= t; b/=t;
}
// 最终a与b就是分数求和的分子和分母 (numerator/denominator)
网友评论