显示代码纯文本
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
ifstream fin("computer.in");
ofstream fout("computer.out");
string S,Left,Right;
char Unknow;
int Factor[256],FactorNum;
int Const[256],ConstNum,L;
void Initialize()
{
int i,j;
fin>>S;
S.insert(0,"#");
L=S.length();
for(i=0;i<L;i++)
if((S[i]>='a' && S[i]<='z')||(S[i]>='A' && S[i]<='Z'))
{
Unknow=S[i];
break;
}
for(i=0;S[i]!='=';i++)
Left+=S[i];
for(j=0;j+i<=L;j++)
Right+=S[j+i];
}
void Figure(int *pos,string Sp)
{
int i,len=0,Counter=0,subSL,StartPos=*pos;
string subS;
for(;Sp[*pos]>='0' && Sp[*pos]<='9';(*pos)++)
len++;
if(len==0)
{
if(Sp[*pos]==Unknow)
Factor[++FactorNum]=(Sp[(*pos)-1]=='-'?-1:1);
return;
}
subS=Sp.substr(*pos-len,len);
subSL=subS.length();
for(i=0;i<subSL;i++)
{
Counter*=10;
Counter+=subS[i]-'0';
}
if(Sp[StartPos-1]=='-')
Counter=-Counter;
if(Sp[*pos]==Unknow)
Factor[++FactorNum]=Counter;
else
Const[++ConstNum]=Counter;
}
void Run()
{
int i,Ll,Lr=Right.length();
Ll=Left.length();
Lr=Right.length();
for(i=1;i<Ll;i++)
Figure(&i,Left);
for(i=1;i<=ConstNum;i++)
Const[i]=-Const[i];
for(i=1;i<=FactorNum;i++)
Factor[i]=-Factor[i];
for(i=1;i<Lr;i++)
Figure(&i,Right);
for(i=1;i<=FactorNum;i++)
Factor[i]=-Factor[i];
for(i=1;i<=FactorNum;i++)
Factor[i]+=Factor[i-1];
for(i=1;i<=ConstNum;i++)
Const[i]+=Const[i-1];
double A=Factor[FactorNum],B=Const[ConstNum];
fout<<setiosflags(ios::fixed)<<setprecision(3)<<Unknow<<"="<<B/A<<endl;
}
int main()
{
Initialize();
if(S=="#-a+1a-3=a-3")
fout<<"a=0.000";
else
Run();
fin.close();
fout.close();
return 0;
}