Loading... 这道题目当时真的想了好久,死都想不出来为什么错了 (可能是我太菜了吧QAQ) 上题目吧 ------------ ![微信图片_20181126224016.png](https://blog.domineto.top/usr/uploads/2018/11/3187946617.png) ![微信图片_20181126224036.png](https://blog.domineto.top/usr/uploads/2018/11/3646022276.png) ------------ 那么这题坑点主要有两个: 1.可能有+0x或者-0x这样的坑; 2.C++的double型会出现+0和-0的区别 ~~(你没在逗我?)~~ 第二个坑确实让我长知识了~~(利用这个坑出题人也是……)~~ 那么,此题代码如下 ~~(才不会告诉你我懒得改代码直接抄题解)~~ ```cpp #include <bits/stdc++.h> using namespace std; typedef long long ll; char x; ll coe,value,opp=1; //coe表示系数,value表示值,opp表示在等号左边还是右边 double ans; int main() { char c=getchar(); ll cur=0,sign=1; bool value_gotten=false; //cur为当前读入的数值,sign表示当前数值符号,value_gotten是一个标记变量,字面意思是是否读入过数值,用途下面说 while (true) { if (c>='a' && c<='z') { x=c; if (cur==0 && !value_gotten) { coe+=opp*sign; value_gotten=false; //这也是个坑点(虽然数据没有涉及),如果cur为0又读入了变量名称有两种情况: //一时+0x或-0x,另一种是默认系数为1,value_gotten专门判断这两种情况 } else { coe+=opp*sign*cur; cur=0; sign=1; value_gotten=false; } } else if (c=='-') { value+=-opp*sign*cur; cur=0; sign=-1; value_gotten=false; //如果是减号把当前数值加入值 //(如果之前是变量则当前数值为0,加入也没有影响) //并清空当前数值,设value_gotten为false,符号修改为负 } else if (c=='+') { value+=-opp*sign*cur; cur=0; sign=1; value_gotten=false; //加号和减号一样,只是把符号修改为正 } else if (c>='0' && c<='9') { cur=cur*10+c-'0'; value_gotten=true; //如果是数字,就对cur进行计算,并把value_gotten设为true } else if (c=='=') { value+=-opp*sign*cur; cur=0; sign=1; opp=-opp; value_gotten=false; //等号和加减号差不多,只是要把opp设为负 } else { value+=-opp*sign*cur; break; }//最后的值累加上去 c=getchar(); } ans=double(value)/coe;//计算ans printf("%c=%.3lf",x,ans==0?abs(ans):ans); //这涉及一个很坑的地方: //C++里0除以一个负数值为-0,专门避免这种情况 return 0; } ``` 最后修改:2018 年 12 月 06 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏