64分RE,不知为何
查看原帖
64分RE,不知为何
1023189
wangtairan114楼主2023/8/19 20:59

64分RE,不知为何

Received signal 6: Aborted / IOT trap.

本代码乃本蒟蒻写的64分RE代码,报错诡异,一定要注意看RE信息

请大佬们帮忙调试前提是耐心看完整篇代码,能看完的我一定会关,记得私聊我(本蒟蒻酷爱STL)

#include <bits/stdc++.h>
using namespace std;
#define sc scanf
#define pr printf
pair<int,pair<int,int>> isfinal(string s)
{
    int pos=-1;
    for(int i=0; i < s.size(); i++)
    {
        if(s[i]=='=')
        {
            pos=i;
        }
    }
    bool ok1=1,ok2=1;
    for(int i=1; i < pos; i++)
    {
        if(s[i]=='+'||s[i]=='-')
        {
            ok1=0;
        }
    }
    for(int i=pos+2; i < s.size(); i++)
    {
        if(s[i]=='+'||s[i]=='-')
        {
            ok2=0;
        }
    }
    int cnt1=0,cnt2=0,sd=0;
    if(ok1)
    {
        if(s[0]>='0'&&s[0]<='9')
        {
            cnt1=int(s[0]-'0');
        }
        for(int i=1; i < pos; i++)
        {
            if(s[i]>='0'&&s[i]<='9')
            {
                cnt1=cnt1*10+int(s[i]-'0');
            }
            else{
                sd=1;
            }
        }
        if(sd==1&&cnt1==0)
        {
            cnt1=1;
        }
        if(s[0]=='-')
        {
            cnt1=-cnt1;
        }
    }
    if(ok2)
    {
        if(s[pos+1]>='0'&&s[pos+1]<='9')
        {
            cnt2=int(s[pos+1]-'0');
        }
        for(int i=pos+2; i < s.size(); i++)
        {
            if(s[i]>='0'&&s[i]<='9')
            {
                cnt2=cnt2*10+int(s[i]-'0');
            }
            else
            {
                sd=2;
            }
        }
        if(sd==2&&cnt2==0)
        {
            cnt2=1;
        }
        if(s[pos+1]=='-')
        {
            cnt2=-cnt2;
        }
    }
    if(!ok1||!ok2)
    {
        sd=0;
    }
    return{sd,{cnt1,cnt2}};
}
int getside(string s)
{
    int pos1=-1,pos2=-1;
    for(int i=0; i < s.size(); i++)
    {
        if(s[i]=='=')
        {
            pos2=i;
        }
        else
        {
            if(s[i]!='+'&&s[i]!='-'&&!(s[i]<='9'&&s[i]>='0'))
            {
                pos1=i;
            }
        }
    }
    if(pos1>pos2)
    {
        return 1;
    }
    return 2;
}
double getans(string s)
{
    pair<int,pair<int,int>> z=isfinal(s);
    if(z.first)
    {
        if(z.first==1)
        {
            return double(double(z.second.second)/double(z.second.first));
        }
        else
        {
            return double(double(z.second.first)/double(z.second.second));
        }
    }
    int sd=getside(s),loc=-1;
    string ss="";
    queue<string> q,q2;
    if(sd==1)
    {
        int pos=0;
        while(s[pos]!='='){
            while(s[pos]!='='&&s[pos]!='+'&&s[pos]!='-')
            {
                ss+=s[pos];
                pos++;
            }
            q.push(ss);
            ss="";
            if(s[pos]!='=')
            {
                ss+=s[pos];
                pos++;
            }
        }
        loc=pos;
        pos++;
        ss="";
        while(pos<s.size()){
            while(pos<s.size()&&s[pos]!='+'&&s[pos]!='-')
            {
                ss+=s[pos];
                pos++;
            }
            q2.push(ss);
            ss="";
            if(pos<s.size()){
                ss+=s[pos];
                pos++;
            }
        }
    }
    else
    {
        int pos=0;
        while(s[pos]!='=')
            pos++;
        loc=pos;
        pos++;
        while(pos<s.size()){
            while(pos<s.size()&&s[pos]!='+'&&s[pos]!='-')
            {
                ss+=s[pos];
                pos++;
            }
            q.push(ss);
            ss="";
            if(pos<s.size()){
                ss+=s[pos];
                pos++;
            }
        }
        pos=0;
        ss="";
        while(s[pos]!='='){
            while(s[pos]!='='&&s[pos]!='+'&&s[pos]!='-')
            {
                ss+=s[pos];
                pos++;
            }
            q2.push(ss);
            ss="";
            if(s[pos]!='=')
            {
                ss+=s[pos];
                pos++;
            }
        }
    }
    int cnt=0;
    while(!q.empty())
    {
        if(q.front()==""){
            q.pop();
            continue;
        }
        if(q.front()[q.front().size()-1]>='0'&&q.front()[q.front().size()-1]<='9'){
            cnt+=stoi(q.front());
            q.pop();
        }
        else{
            if(q.front()[0]=='+')
            {
                q.front()[0]='-';
                q2.push(q.front());
            }
            else
            if(q.front()[0]=='-')
            {
                q.front()[0]='+';
                q2.push(q.front());
            }
            else{
                string x="-";
                x+=q.front();
                q2.push(x);
            }
            q.pop();
        }
    }
    string ns;
    int cal=0;
    ns+=to_string(cnt);
    while(!q2.empty())
    {
        if(q2.front()==""){
            q2.pop();
            continue;
        }
        if(q2.front()[q2.front().size()-1]>='0'&&q2.front()[q2.front().size()-1]<='9')
        {
            if(q2.front()[0]=='+')
            {
                q2.front()[0]='-';
                ns+=q2.front();
            }
            else
            if(q2.front()[0]=='-')
            {
                q2.front()[0]='+';
                ns+=q2.front();
            }
            else{
                ns+='-';
                ns+=q2.front();
            }
            q2.pop();
        }
        else{
            const string sss=q2.front().substr(0,q2.front().size()-1);
            cal+=stoi(sss);
            q2.pop();
        }
    }
    ns+='=';
    ns+=to_string(cal);
    ns+='x';
    return getans(ns);
}
int main() {
    string s;
    cin >> s;
    char c;
    for(int i=0; i <s.size(); i++)
    {
        if(s[i]>='a'&&s[i]<='z')
        {
            c=s[i];
        }
    }
    pr("%c=%.3lf",c,getans(s));
    return 0;
}
2023/8/19 20:59
加载中...