求求大佬帮帮我
#include <bits/stdc++.h>
using namespace std;
#define ll long long
char a[1000],w;
ll last=1,l,r,flag,wf=1,sf=-1,lastf=1,j=1;
//last:当前的数字,l:未知数总系数,r:总常数
//flag:上个数是不是未知数系数
//wf:当前未知数符号,sf:当前常数符号
//lastf:当前的数字的符号
//j:数字是不是假的(没输入数字,判断a+1=1之类)
int main(){
scanf("%[^\n]%*c",a);
ll len=strlen(a)-1;
for (ll i=0;i<=len;i++)
{
if (a[i]==61)
{
if (!flag)
r+=last*sf*lastf;
else
flag=0;
last=1;
lastf=1;
j=1;
wf=-1;
sf=1;
continue;
}
if (a[i]>61)
{
w=a[i];
l=l+last*wf*lastf;
flag=1;
continue;
}
if (a[i]<48)
{
if (!j)
{
if (!flag)
r+=last*sf*lastf;
else
flag=0;
last=1;
}
if (a[i]=='-')
lastf=-1;
else
lastf=1;
j=1;
continue;
}
int k=a[i]-'0';
if (!j)
last=last*10+k;
else
{
last=k;
j=0;
}
flag=0;
}
if (!flag)
r+=last*sf*lastf;
else
flag=0;
float k=(float)r/(float)l*1.0;
printf("%c=%.3f\n",w,k);
return 0;
}
思路如下:
1.未知数放左边,常数放右边,所以等号左边wf为1、sf为-1,等号右边相反
2.如果当前输入一个符号,就计算前面的数字,未知数的系数在发现未知数时已解决,反之当场解决,再把last改为1,以防下一个未知数无系数,如1+a+1=3
3.输入数时,如果last为2操作的1,那么覆盖;反之放在最后
谢谢,