7-35 有理数均值 (20分) C++实现
程序员文章站
2022-06-07 09:51:35
...
使用long long对数据进行存储,同时要在每一次计算结束后进行求取最大公因数的操作,每一次都要除以最大公因数,防止计算溢出出错。最后要对整个计算结果是否为负数进行判断,是负数在子项处加上"-",x,y取绝对值。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
LL gcd(LL a,LL b) //对最大公因数进行查找。
{
return b?gcd(b,a%b):a;
}
int main()
{
cin>>n;
int m=n;
n--;
LL x,y,x1,y1,g;
scanf("%lld/%lld",&x,&y);
while(n--)
{
scanf("%lld/%lld",&x1,&y1);
x = x*y1+x1*y;
y = y*y1;
g = gcd(x,y);
x = x/g;
y = y/g;
}
y=y*m;
g = gcd(x,y);
int f=1;
if((x>0 && y>0) || (x<0 && y<0)) f=0;
x = fabs(x/g),y=fabs(y/g);
if(f && x!=0) printf("-");
if(x%y==0) printf("%lld",x);
else printf("%lld/%lld\n",x,y);
return 0;
}
上一篇: 7-5 六度空间