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

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. Beta阶段项目终审报告
  2. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013
  3. Navicat Premium下sql导入中文乱码解决方案
  4. MEF入门之不求甚解,但力求简单能讲明白(五)
  5. [转]maven创建自定义的archetype
  6. [webgrid] &ndash; selecterow - (Get Selected Row from ASP.NET MVC 3 WebGrid)
  7. Python::OS 模块 -- 进程管理
  8. 深搜+回溯 POJ 2676 Sudoku
  9. EntityFramework_MVC4中EF5 新手入门教程之三 ---3.排序、 筛选和分页
  10. 基于Dubbo框架构建分布式服务
  11. (10.09作业)学生选课数据库SQL语句练习题
  12. Element type &quot;bean&quot; must be followed by either attribute specifications, &quot;&gt;&quot; or &quot;/&gt;&quot;.
  13. Java对【JSON数据的解析】--fastjson解析法
  14. python命令行神器Click
  15. VB6之SendMessage模拟拖放事件
  16. Python实现栈
  17. Jet.com
  18. React性能分析利器来了,妈妈再也不用担心我的React应用慢了(转)
  19. 重新认识Javascript的一些误区总结
  20. C# WORD操作实现代码(转载)

热门文章

  1. 常用的meta标签
  2. MySQL5.7以上开启binlog
  3. jail brak 获取当前安装app列表
  4. oracle行转列函数
  5. Android截图命令screencap
  6. Chapter 1 First Sight——31
  7. LeetCode OJ 26. Remove Duplicates from Sorted Array
  8. Stsadm 导入导出子站点
  9. Number-guessing Game
  10. vs2010使用C