求调!!!!谢谢大佬

P1022 [NOIP2000 普及组] 计算器的改良

码风有亿点点垃圾()
by Xiiii @ 2022-08-20 21:53:15


@[Xiiii](/user/480877) 输出好像多打了一个l,而且似乎没判系数为 $1$ 的情况(单个字母)
by Wilson_Lee @ 2022-08-20 22:14:41


@[Wilson_Lee](/user/513900) 差了测试点#5 [](https://www.luogu.com.cn/record/84614464) 系数和输出这里都改了 测试点下载不了(我今天都还没下过测试点数据)
by Xiiii @ 2022-08-21 08:44:49


@[Wilson_Lee](/user/513900) ```cpp #include<bits/stdc++.h> using namespace std; string s; int sign,k,cnt; char c; double ans,l,r; int main(){ cin>>s; if(s[0]=='-') sign=2; else sign=1; s=s+"@"; for(int i=0;i<s.length();i++){ if(s[i]=='='){ if(sign==1) r-=cnt; else r+=cnt; cnt=0; } if(s[i-1]=='='){ k=i; break; } if(s[i]=='+'){ if(sign==1) r-=cnt; else r+=cnt; cnt=0; sign=1; } else if(s[i]=='-'){ if(sign==1) r-=cnt; else r+=cnt; cnt=0; sign=2; } else if((s[i]<'0'||s[i]>'9')&&s[i]!='='){ c=s[i]; if(cnt==0) cnt=1; if(sign==1) l+=cnt; else l-=cnt; cnt=0; } else if(s[i]>='0'&&s[i]<='9') cnt=cnt*10+(s[i]-'0'); } cnt=0; if(s[k]=='-') sign=2; else sign=1; for(int i=k;i<s.length();i++){ if(s[i]=='@'){ if(sign==1) r+=cnt; else r-=cnt; break; } if(s[i]=='+'){ if(sign==1) r+=cnt; else r-=cnt; cnt=0; sign=1; } else if(s[i]=='-'){ if(sign==1) r+=cnt; else r-=cnt; cnt=0; sign=2; } else if((s[i]<'0'||s[i]>'9')&&s[i]!='='){ c=s[i]; if(cnt==0) cnt=1; if(sign==1) l-=cnt; else l+=cnt; cnt=0; } else if(s[i]>='0'&&s[i]<='9') cnt=cnt*10+(s[i]-'0'); } ans=r/l; printf("%c=%0.3lf",c,ans); return 0; } ```
by Xiiii @ 2022-08-21 08:48:42


在输出0-9+8=x-9+8之类的方程式中这个程序得数为x=-0.000,做一个特判就好啦
by mmdxm @ 2022-10-07 15:48:55


``` if(ans==-0) ans=0; ``` 特判这样写就满分了@[Xiiii](/user/480877)
by mmdxm @ 2022-10-07 15:50:44


@[liuyufei0925](/user/526235) 谢谢谢谢谢谢谢谢!!!
by Xiiii @ 2022-10-14 21:47:34


|