题目:
http://www.kuangbinoj.com:8080/problem.php?id=1220
题意:
中文题就不用了吧= =
思路:
模拟。
模拟弱=。=
#include <ctype.h> isdigit(s[i]) 是数字返回true,否则NULL。
AC.
#include <iostream>
#include <cstdio>
#include <ctype.h>
#include <cstring>
using namespace std;
char s[100005], x;
int ok;
bool in(int i)
{
if(!isdigit(s[i]) && s[i] != '=' && s[i] != '+' && s[i] != '-') return true;
return false;
}
int deal(int i)
{
if(i < 0) return -1;
if(ok) {
if(s[i] == '+') {
return 1;
}
else if(s[i] == '-') {
return -1;
}
else if(s[i] == '='){
ok = 0;
return 1;
}
}
else {
if(s[i] == '+') {
return -1;
}
else if(s[i] == '-') {
return 1;
}
}
}
int main()
{
// freopen("in.in", "r", stdin);
int T;
scanf("%d", &T);
while(T--) {
scanf("%s", s);
int len = strlen(s);
int xn = 0, n = 0;
int k = 0, cnt, c;
ok = 1;
int i = len-1;
//printf("%d\n", isdigit(s[i]));
while(i >= 0) {
if(in(i)) {
x = s[i];
i--;
if(i < 0) xn -= 1;
else if(s[i] == '=') {
ok = 0;
xn++;
i--;
}
else if(s[i] == '-' || s[i] == '+') {
//printf("ok = %d %d\n", ok, i);
xn += deal(i);
i--;
}
else {
cnt = 0;
c = 1;
while(isdigit(s[i]) && i >= 0) {
cnt = cnt + (s[i]-'0')*c;
c *= 10;
i--;
}
//printf("cnt = %d\n", deal(i)*cnt);
if(cnt == 0) xn += deal(i);
else xn += deal(i)*cnt;
i--;
if(s[i] == '=') {
ok = 0;
i--;
}
}
}
else {
cnt = 0;
c = 1;
while(isdigit(s[i]) && i >= 0) {
cnt = cnt + (s[i]-'0')*c;
c *= 10;
i--;
}
n += deal(i)*cnt;
i--;
if(s[i] == '=') {
ok = 0;
i--;
}
}
}
//printf("%d %d\n", xn, n);
double ans;
if(xn == 0) ans = 0;
else ans = (double)n / xn*-1;
if(ans == -0) ans = 0;
printf("%c=%.3f\n", x, ans);
}
return 0;
}