解决我错误的原因,不知道问什么会有浮点错误,以及为什么会有答案错误

问题遇到的现象和发生背景

PTA天梯赛L1-009 N个数求和 (20 分)

问题相关代码,请勿粘贴截图
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n;
    cin>>n;
    char c;
    int fenzi[n],fenmu[n];
    for(int i=0;i<n;i++)cin>>fenzi[i]>>c>>fenmu[i];
    int multi=1;
    for(int i=0;i<n;i++)
    {
        multi*=fenmu[i];
    }
    //cout<<multi<<endl;
    int fenzi2[n];
    for(int i=0;i<n;i++)
    {
        fenzi2[i]=fenzi[i]*(multi/fenmu[i]);
    }
    //for(int i=0;i<n;i++)cout<<fenzi2[i]<<" ";
    int sum=0;
    for(int i=0;i<n;i++)
    {
        sum=sum+fenzi2[i];
    }
    //cout<<sum<<endl;
    //cout<<18+(-30)+120<<endl;
     //int min = sum<multi?sum:multi;
    //cout<<max<<endl;
    int x=abs(sum),y=multi;
    /*
    while(x!=y)
    {
        if(x>y)x-=-y;
        else y-=x;
    }
    sum=sum/x;
    multi=multi/x;
    */
    int m=x*y,temp=0;
     if(x<y)
     {
        temp=y;
        y=x;
        x=temp;
    }
    while(y!=0)
    {
        temp=x%y;
        x=y;
        y=temp;
    }
    
    
    
    //找最大公约数,最小公倍数
    
    
    
    sum=sum/x;
    multi=multi/x;
    //cout<<multi<<endl<<endl;
    if(abs(sum)<multi)cout<<sum<<c<<multi;
    else if(abs(sum)%multi==0)cout<<sum/multi;
    else 
    {
        if(sum==0)return 0;
        int a=abs(sum)/multi;
        //cout<<a<<endl<<endl;
        if(sum<0)cout<<"-"<<a<<" -"<<abs(sum)-a*multi<<c<<multi;
        else cout<<a<<" "<<sum-a*multi<<c<<multi;
    }
    return 0;
}


运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

满分

累加的时候可能会超过int类型。下面是同样的问题:
https://blog.csdn.net/xiao__hei__hei/article/details/88851771?utm_source=app&app_version=4.18.0

因为你用的是整数除法