题解 P1689 【方程求解】

Sweetlemon

2017-02-10 13:22:42

Solution

这是一道字符串/模拟题,需要注意的有几点: 1.读入时要忽略一切空格。 2.若全部把'-'号当做负号给数,要注意数的符号。如果'?'前有负号,要带上。(如果不带上,过不了第3个点。) 下面是代码(C,5ms,8261kb)。 ```cpp #include <stdio.h> #include <stdbool.h> #include <ctype.h> long getnum(int); char get(void); int ques=0; char leave=' '; bool quessymbol=0; int main(void){ long a,b,c; a=getnum(1); b=getnum(2); c=getnum(3); switch (ques){ case 1:printf("%ld",quessymbol?b-c:c-b);break; case 2:printf("%ld",quessymbol?a-c:c-a);break; case 3:printf("%ld",quessymbol?-a-b:a+b);break; } return 0; } long getnum(int i){ char t; bool symbol=0; long temp=0; if (leave!=' ') t=leave; else t=get(); if (t=='=' || t=='+') t=get(); if (t=='-'){ symbol=1; t=get(); } if (t=='?'){ ques=i; quessymbol=symbol; leave=' '; return 0; } while (isdigit(t)){ temp=temp*10+(t-'0'); t=get(); } leave=t; if (symbol) temp=-temp; return temp; } char get(void){ char t='\0'; if (scanf("%c",&t)) while (t==' ') scanf("%c",&t); return t; } ```