http://wikioi.com/problem/1015/
这种题真恶心。(字符串的处理= =)
解一元一次方程及化为k=ax,从而可以解得x=k/a,所以要找系数和和常数项和
贴上数据 20+3x=-18
-6+12x=0
47-2=6y+3
-25a+18-2=-7a-2
-a+1a-3=a-3
自己手算把
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
char s[1000];
int l=12;
int xk=0,ck=0;
int i;
char x;
int main()
{
scanf("%s",s+1);
for(i=1;;i++)
{
if(s[i]=='=')break;//记录=号前的
if(s[i]-'0'<=9&&s[i]-'0'>=0)
{
int w=s[i]-'0';
int f=i;
while(s[i+1]-'0'<=9&&s[i+1]-'0'>=0)//计算系数
{
w=w*10+s[i+1]-'0';
i++;
}
if(isalpha(s[i+1]))
{
x=s[i+1];
if(s[f-1]=='-')
{
xk+=-1*w;
}
else xk+=w;
}
else
{
if(s[f-1]=='-')
{
ck+=-1*w;
}
else ck+=w;
}
}
}
for(int j=i+1;;j++)//同上
{
if(s[j]=='\0')break;
if(s[j]-'0'<=9&&s[j]-'0'>=0)
{
int f=j;
int w=s[j]-'0';
while(s[j+1]-'0'<=9&&s[j+1]-'0'>=0)
{
w=w*10+s[j+1]-'0';
j++;
}
if(isalpha(s[j+1]))
{
x=s[j+1];
if(s[f-1]=='-')
{
xk+=w;
}
else xk+=-1*w;
}
else
{
if(s[f-1]=='-')
{
ck+=w;
}
else ck+=-1*w;
}
}
}
//cout<<ck<<"\n"<<xk<<"\n";
double ans;
if(xk!=0)ans=-1.0*ck/xk;
if(ans==-0.0)ans=0.0;//不特判有-0.000 尼玛
printf("%c=%.3lf",x,ans);
return 0;
}