题目链接
传送门
这道题本身就是个分数相加没啥说的,就是这个测试点我踩了很多坑,也是我思考不全面
- 首先是 负数输出 找最大公因子,我是全搞整数,判断输出负号
- 第二个是测试点3 题目说要长整型
- 第三个是测试点5 我一直找没找出来,后来写了几组数据发现了bug 如果不是分子刚好除分母,加的时候最开始就是0 也需要特判输出
虽然是个简单的题
#include<iostream>//负数符号的判断输出
#include<math.h>//测试点3 长整型范围
using namespace std;
long long gcd(long long a,long long b){
if(a%b==0)return b;
return gcd(b,a%b);
}
struct Dis{
long long fz,fm;
}a[110];
int main(){
int N;
long long sumz=0,summ=1;
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%lld/%lld",&a[i].fz,&a[i].fm);
}
for(int i=0;i<N;i++){
summ=summ*a[i].fm/gcd(summ,a[i].fm);
}
//printf("%d\n",summ);
for(int i=0;i<N;i++){
sumz+=a[i].fz*(summ/a[i].fm);
}
//printf("%d\n",sumz);
int flag=0;
long long c;
if(sumz<0)flag=1,sumz=-sumz;
if(sumz>=summ){
c=sumz/summ;
sumz=sumz%summ;
if(sumz==0){
if(flag)printf("-%lld\n",c);
else printf("%lld\n",c);
}else{
long long y=gcd(sumz,summ);
sumz=sumz/y;
summ=summ/y;
if(flag)printf("-%lld -%lld/%lld\n",c,sumz,summ);
else printf("%lld %lld/%lld\n",c,sumz,summ);
}
}else{
long long y=gcd(sumz,summ);
if(sumz==0)printf("0\n");//测试点5
else{
if(flag)printf("-");
printf("%lld/%lld\n",sumz/y,summ/y);
}
}
return 0;
}