一道ACM省赛题,Codeblocks测试的所有小弟我能想到的数据都通过了,可是提交去是wrongAnswer

一道ACM省赛题,Codeblocks测试的所有我能想到的数据都通过了,可是提交去是wrongAnswer我的代码如下,请高手

一道ACM省赛题,Codeblocks测试的所有我能想到的数据都通过了,可是提交去是wrongAnswer
我的代码如下,请高手帮看看,到底还有什么没有考虑到!
#include <iostream>
using namespace std;

bool isEqual(int f, char op, int s, int r, bool bPos);
int getResult(const string &expresion, int n);
int getFirst(const string &expresion, int n);
int getSecond(const string &expresion, int n, int sBegin);

int main()
{
  string expresion;//接收表达式
  int f, //操作数1
  s, //操作数2
  r; //计算结果
  char op; //执行的操作类型 + 或者 -
  bool bPos = false; //计算结果是否为负
  int len;
  int rightNum = 0;
  int i, nCount;

  while (cin >> expresion)
  {
  len = expresion.size();
  if (expresion[len-1] == '?')
  continue;

  //*********************************处理操作数1***********************************
  i = 0;
  nCount = 0;
  while (expresion[i] >= '0' && expresion[i] <= '9')
  {
  nCount++;
  i++;
  }
  f = getFirst(expresion, nCount);

  //*********************************处理执行的操作 +或者-*************************
  op = expresion[i];

  //*********************************处理操作数2***********************************
  i = nCount+1;
  int sBegin = nCount+1; //操作数2的起始
  nCount = 0;
  while (expresion[i] >= '0' && expresion[i] <= '9')
  {
  nCount++;
  i++;
  }
  s = getSecond(expresion, nCount, sBegin);

  //*********************************处理计算结果***********************************
  i = len-1;
  nCount = 0;
  while (expresion[i] >= '0' && expresion[i] <= '9')//找到计算结果的位数,并判断正负
  {
  i --;
  nCount ++;
  }
  if (expresion[i] == '-') //如果结果为负
  {
  bPos = true;
  //cout << "结果为负" << endl;
  }
  else
  {
  bPos = false;
  //cout << "结果为正" << endl;
  }
  r = getResult(expresion, nCount);

  //*******************判断表达式是否正确*************************************
  if (isEqual(f, op, s, r, bPos))
  {
  rightNum++;
  // cout << "计算正确的哦!" << "rightNum = " << rightNum << endl;
  }
  //else
  // cout << "计算错误的哦!" << "rightNum = " << rightNum << endl;
  }
  cout << rightNum << endl;
  return 0;
}

//********************************************************************************
bool isEqual(int f, char op, int s, int r, bool bPos)
{
  int tmp, t;

  //cout << "expresion: " << f << op << s << "=" << (bPos?"-":"")<< r << endl;;

  switch (op)
  {
  case '+':
  tmp = t = f + s;
  // cout << "tmp=" << tmp << endl;
  if (tmp == r && !bPos)
  return true;
  return false;
  case '-':
  tmp = t = f - s;
  //cout << "tmp=" << tmp << endl;


  tmp = tmp > 0 ? tmp : (-tmp);//求绝对值
  if (tmp == r)
  if ((bPos && t <= 0) || (!bPos && t >= 0))
  return true;
  else
  return false;
  return false;
  }
}
//*********************************************************************************************

int getResult(const string &expresion, int n)
{
  int len = expresion.size();
  int r;
  switch (n)
  {
  case 1:
  r = expresion[len-1] - '0';
  break;
  case 2:
  r = (expresion[len-2] - '0') * 10 + (expresion[len-1] - '0');
  break;
  case 3:
  r = (expresion[len-3] - '0') * 100 + (expresion[len-2] - '0') * 10 + (expresion[len-1] - '0');
  break;
  }
  //cout << "r=" << r << endl;
  return r;
}
//*********************************************************************************************

int getFirst(const string &expresion, int n)
{
  int f;
  switch (n)
  {
  case 1:
  f = expresion[0] - '0';
  break;
  case 2:
  f = (expresion[0] - '0') * 10 + (expresion[1] - '0');
  break;
  }
  //cout << "f=" << f << endl;
  return f;
}

//*********************************************************************************************

int getSecond(const string &expresion, int n, int sBegin)
{
  int s;
  switch (n)
  {
  case 1:
  s = expresion[sBegin] - '0';
  break;
  case 2:
  s = (expresion[sBegin] - '0') * 10 + (expresion[sBegin+1] - '0');
  break;
  }
  //cout << "s=" << s << endl;
  return s;

}
//*********************************************************************************************











[解决办法]
3+3
expresion: 3+3=3
2-1
expresion: 2-1=-1
9+6
expresion: 9+6=6