题目梗概
给出一个一元一次方程,只包含+ - = 数字和未知数。输出结果
思考
果然字符串模拟坑太多,本来打算练练手的,结果写了90多行。
#include <cstdio> #include <cstring> #include <cmath> char s[10002],fuck; int l,r,i,now; double Out; int main(){ scanf("%s",s); bool flag = 1; for(i=0;;i++){ if(s[i]=='=') { if(now!=0){ if(flag)r-=now; else r+=now; now=0; } break; } if(s[i]>='0' && s[i]<='9'){ now=now*10+s[i]-'0'; } else if(s[i]=='+'){ if(now!=0){ if(flag) r-=now; else r+=now; } flag=1; now=0; } else if(s[i]=='-'){ if(now!=0){ if(flag) r-=now; else r+=now; } flag=0; now=0; } else{ if(flag)l+=now; else l-=now; now=0; //fuck=s[i]; } } flag=1; for(;i<strlen(s);i++){ if(s[i]>='0' && s[i]<='9'){ now=now*10+s[i]-'0'; } else if(s[i]=='+'){ if(now!=0){ if(flag) r+=now; else r-=now; } flag=1; now=0; } else if(s[i]=='-'){ if(now!=0){ if(flag) r+=now; else r-=now; } flag=0; now=0; } else{ if(flag)l-=now; else l+=now; now=0; //if(fuck!='a' && fuck!='x' &&fuck!='y' )fuck = s[i]; } //printf("r:%d now:%d\n",r,now); } if(now!=0){ if(flag) r+=now; else r-=now; } i=0; while(1){ if(s[i]>='a' && s[i]<='z'){ fuck = s[i]; break; } i++; } //printf("l:%d r:%d\n",l,r); Out = (double)r/l; printf("%c=%.3f",fuck,Out); return 0; }