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;
}