求助!#5加了0的特判还是WA
查看原帖
求助!#5加了0的特判还是WA
186541
linzhaoyumc楼主2021/9/11 11:05

Rt

#include<iostream>//P1022
#include<string>
#include<sstream>
#include<cstdio>
#include<cmath>
using namespace std;
bool used[1000010];
template<class TA,class TB>
TB atob(const TA &a)
{
	stringstream st;
	st<<a;
	TB b;
	st>>b;
	return b;
}
int main()
{
	string in,s;
	cin>>in;
	int len=in.size(),eq;
	char x;
	for(int i=0;i<len;i++)
	{
		if(96<in[i]&&in[i]<123) x=in[i];
		if(in[i]=='=') eq=i;
	}
	s=in.substr(0,eq);
	if(in[eq+1]>47&&in[eq+1]<58)
	{
		s+="-";
		s.push_back(in[eq+1]);
	}
	else s+="+";
	for(int i=eq+2;i<len;i++)
	{
		if(in[i]=='-') s.push_back('+');
		else if(in[i]=='+') s.push_back('-');
		else s.push_back(in[i]);
	}
	if(s[0]!='-') s="+"+s;
	len=s.size();
	//cout<<s<<endl;
	int sumx=0,sum=0;
	for(int i=1;i<len;i++)
	{
		if(s[i]==x)
		{
			int j=i-1;
			used[i]=1;
			while(j>=0)
			{
				used[j]=1;
				if(s[j]=='+'||s[j]=='-') break;
				j--;
			}
			string cur=s.substr(j,i-j);
			sumx+=atob<string,int>(cur);
			//cout<<cur<<" "<<sumx<<endl;
		}
	}
	//for(int i=0;i<len;i++) cout<<used[i];
	//cout<<endl;
	for(int i=0;i<len;i++)
	{
		if(!used[i])
		{
			int w=1,j=1;
			if(s[i]=='-') w=-1;
			while(!used[i+j]&&s[i+j]!='-'&&s[i+j]!='+') j++;
			string cur=s.substr(i+1,j-1);
			sum+=w*atob<string,int>(cur);
			//cout<<cur<<" "<<sum<<" "<<i<<" "<<j<<" "<<s[i]<<endl;
			i+=j-1;
		}
	}
	//cout<<sum<<" "<<sumx<<endl;
	double ans=-1.0*sum/sumx;
	//printf("%.6f\n",ans);
	if(ans==-0.000) ans=0;
	printf("%c=%.3f",x,ans);
}
2021/9/11 11:05
加载中...