题解 P1689 【方程求解】
Sweetlemon
2017-02-10 13:22:42
这是一道字符串/模拟题,需要注意的有几点:
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;
}
```