因为这个题目说明了优先级的规定,所以可以从左到右直接运算,在处理嵌套括号的时候,可以使用递归的方法,给定每一个括号的左右边界,伪代码如下:

int Cal(){

if(括号)  sum += Cal();

   else sum += num;

  return sum;

}

  但是这个题目着实坑了我一下,见过WA了,没见过TLE呢……我因为没有看到有空格这个条件,无线TLE,又是消除函数又是改用数组模拟栈,其实就是读入出错和忘记了处理空格,改了之后,成功AC了。代码如下:

#include<iostream>
#include<cmath>
#include<vector>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
#define maxn 100
int pos[maxn],st[maxn];
int Cal(int id,const char *a){
int sum = ,tmp;
for(int i = id+;i < pos[id];i++){
if(a[i] == '('){
tmp = Cal(i,a);
if(a[i-]=='(' || a[i-]=='+') sum += tmp;
else if(a[i-]=='-') sum -= tmp;
else if(a[i-]=='*') sum *= tmp;
i = pos[i];
}
else if((a[i]>='a'&&a[i]<='z')||(a[i]>=''&&a[i]<='')){
if(a[i]>='a'&&a[i]<='z') tmp = (a[i]-'a'+);
else tmp = a[i]-'';
if(a[i-]=='(' || a[i-]=='+') sum += tmp;
else if(a[i-]=='-') sum -= tmp;
else if(a[i-]=='*') sum *= tmp;
i++;
}
}
return sum;
}
int getnum(const char *a){
memset(pos,,sizeof(pos));
memset(st,,sizeof(st));
int len = strlen(a);
int top = ;
for(int i = ;i < len;i++)
{
if(a[i]=='(') st[top++] = i;
if(a[i]==')') {
pos[st[--top]] = i;
}
}
int sum = ,tmp;
for(int i = ;i < len;i++){
if(a[i]=='('){
tmp = Cal(i,a);
if(i == || a[i-]=='+')
sum += tmp;
else if(a[i-] == '-') sum -= tmp;
else if(a[i-] == '*') sum *= tmp;
i = pos[i];
}
else if((a[i]>='a'&&a[i]<='z')||(a[i]>=''&&a[i]<='')){
if(a[i]>='a'&&a[i]<='z') tmp = (a[i]-'a'+);
else tmp = a[i]-'';
if(i == || a[i-]=='+')
sum += tmp;
else if(a[i-] == '-') sum -= tmp;
else sum *= tmp;
i++;
}
}
//printf("the num = %d\n",sum);
return sum;
}
int main()
{
int t,lena,lenb,num1,num2,tot;
char a[maxn],b[maxn];
scanf("%d",&t);
getchar();
while(t--){
gets(a);
lena = strlen(a);
tot = ;
for(int i = ;i < lena;i++){
if(a[i]==' ') continue;
else b[tot++] = a[i];
}
b[tot] = '\0';
num1 = getnum(b);
gets(a);
lena = strlen(a);
tot = ;
for(int i = ;i < lena;i++){
if(a[i]==' ') continue;
else b[tot++] = a[i];
}
b[tot] = '\0';
num2 = getnum(b);
if(num1 == num2) puts("YES");
else puts("NO");
}
return ;
}

最新文章

  1. 如何在 TFS 中使用 Git
  2. js晋级篇——前端内存泄漏探讨
  3. Ajax中Get请求与Post请求的区别
  4. Leetcode--Swap Nodes in Pairs
  5. EF快速开发定义数据接口类(转)
  6. 从零开始学习Node.js例子三 图片上传和显示
  7. iOS 处理多个网络请求的并发的情况
  8. [Flex] PopUpButton系列 —— 添加按钮图标
  9. ExtJs4学习MVC中的Store
  10. C语言char[]和char*比较
  11. SQL语句之二建表
  12. UVA 10943 How do you add?
  13. HOWTO: 为GitHub for Windows指定代理服务器(转)
  14. .Net程序员学用Oracle系列(1):导航目录
  15. 基于 Spring MVC 的开源测试用例管理系统以及开发自测的实践
  16. CentOS安装node.js-8.11.1+替换淘宝NPM镜像
  17. 为CCB中的Sprite子类化CCSprite的一个问题
  18. js限制字符串长度,超出的部分补...
  19. 用matlab生成mif文件
  20. Java中的ReentrantLock和synchronized两种锁定

热门文章

  1. hdu 1407 测试你是否和LTC水平一样高
  2. JQuery 阻止事件冒泡
  3. amazeui tab 监听当前选项
  4. python 信用卡系统+购物商城见解
  5. shell 之awk 关联数组高级应用
  6. Developing a Custom Membership Provider from the scratch, and using it in the FBA (Form Based Authentication) in SharePoint 2010
  7. SharePoint 2013 列表启用搜索
  8. Git 的 .gitignore 配置 转载
  9. Edit Individual GridView Cells in ASP.NET
  10. mib.c