首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
想去毕业旅行的大熊猫在看数据
吉林大学 算法工程师
发布于吉林
关注
已关注
取消关注
@阿阿阿阿锋:
表达式转换-中缀转后缀表达式后计算-数据结构与算法
前言 🚀 个人主页:阿阿阿阿锋的主页_CSDN🔥 有问题欢迎指出,🔥 希望能和大家一起加油,一起进步! @[TOC] 问题 一个==计算中缀表达式==的算法题 40分,其余六个测试点都显示"read(ASCII 13)"我的代码现在一直只能过第1、6、7、8这四个测试集,查看测试集显示错误信息:“Wrong Answer.wrong answer On line 1 column 25, read (ASCII 13), expected +.”题目链接:表达式转换-洛谷 我查了(ASCII 13)是回车键,但是我又能过四个测试集,为什么输出会有回车键的问题呢? 谁能救救我啊?万分感谢! 下面是我的代码(可能有点乱,抱歉): /*long long1)输入数字是单个数字2)输入没有负数 */#include#include#includeusing namespace std;const int max0 = 500;stack s; //计算后缀表达式用 long long get_num(); //从栈中返回一个整型数字 bool compare_sign(char big, char small); //比较两个(四则运算符)运算符的优先级 void change(char str[]); //给新转化出来的后缀表达式 操作数 加分隔符'.'void out_bds(char str[], int i, stack ss);//输出中间产物表达式int main() { char a[max0]{}; //后缀表达式 int ac(0); //迭代a stack sign; //符号栈 char m[max0]{}; //待处理的中缀表达式 char ch(0); for(int i = 0; i < max0; ++i){ ch = getchar(); if(ch == '\n') break; m[i] = ch; } //--------------------一、中缀表达式转后缀表达式 for(int i = 0; i //读取中缀表达式并开始转换 if('0' //遇到操作数,直接加入后缀表达式 a[ac++] = m[i]; } else if(m[i] != '(' && m[i] != ')') { while(!sign.empty() && compare_sign(sign.top(), m[i])) { a[ac++] = sign.top(); //遇到运算符,出栈优先级不小于它的运算符加入表达式,直到栈空或遇到'(' sign.pop(); } sign.push(m[i]); } //然后自己入栈 else if(m[i] == '(') { sign.push(m[i]); } else if(m[i] == ')') { //遇到')',出栈加入表达式直到'(' while(sign.top() != '(') { a[ac++] = sign.top(); sign.pop(); } sign.pop(); }} while(!sign.empty()) { //出栈所有剩余运算符 a[ac++] = sign.top(); sign.pop(); } change(a); out_bds(a, 0, s); //--------------------二、计算后缀表达式 char t(0); ac = 0; while(true) { t = a[ac++]; //入栈 if(t == '@') {s.pop();break;} s.push(t); if(t == '+' || t == '-' || t == '*' || t == '/' || t == '^') { //见运算符 s.pop(); //出栈运算符 long long d(0), b(0); //出栈两个数字为int型 s.pop(); d = get_num(); s.pop(); b = get_num(); long long result(1); //计算 if(t == '+') result = b + d; else if(t == '-') result = b - d; else if(t == '*') result = b * d; else if(t == '/') result = b / d; else if(t == '^') { for(int i = 0; i < d; ++i) result *= b; } if(result < 0) {s.push('0'); result = -result;} stack c; //结果转为char型再入栈 if(result == 0) {s.push('0');} while(result != 0) { c.push((char)(result % 10 + '0')); result /= 10; } while(!c.empty()) { s.push(c.top()); c.pop(); } s.push('.'); out_bds(a, ac, s); }} return 0; }//----------------------------------------//只考虑了表达式转换过程中可能发生的优先级比较 bool compare_sign(char big, char small) { if(big == '+' || big == '-') { if(small == '+' || small == '-') return true; } else if(big == '*' || big == '/' || big == '^') { if(small != '(' && small != '^') return true; } return false; }//----------------------------------------//从char型栈中读取出一个int型操作数 long long get_num() { long long sum(0); char t(0); for(long long i = 1; s.top() != '.'; i *= 10) { //i也是必须开long long的 t = s.top(); sum += (long long)(s.top() - '0') * i; s.pop(); if(s.empty()) break; } if(t == '0') sum = -sum; return sum; }//----------------------------------------//从char型栈中读取出一个int型操作数;out_bds()的配套 long long get_num(stack &ss) { long long sum(0); char t(0); for(long long i = 1; ss.top() != '.'; i *= 10) { t = ss.top(); sum += (long long)(ss.top() - '0') * i; ss.pop(); if(ss.empty()) break; } if(t == '0') sum = -sum; return sum; }//----------------------------------------//给新转化出来的后缀表达式 操作数 加分隔符'.'void change(char str[]) { char t[max0]{}; int tc(0); for(int i = 0; str[i] != '\0'; i++) { if('0' <= str[i] && str[i] <= '9') { t[tc++] = str[i]; t[tc++] = '.'; } else t[tc++] = str[i]; } for(int i = 0; t[i] != '\0'; i++) str[i] = t[i]; str[tc] = '@'; } //表达式结束符//----------------------------------------//输出中间产物表达式,从str[i]开始;参数建立了一个副本栈,不担心原s改变 void out_bds(char str[], int i, stack ss) { stack t; //中转站 while(ss.empty() == 0) { if(ss.top() == '.') ss.pop(); t.push(get_num(ss)); } while(t.empty() == 0) { cout << t.top() << " "; t.pop(); } for( ; str[i] != '\0'; i++) { if(str[i] != '.' && str[i] != '@') cout << str[i] << " "; } cout << endl; } /*测试集8-(3+2*6)/5+49+(9^8+(9^8+(9^8+(9^8))))*/ 程序运行: 经验总结 注意创建的==数组大小==,题目说输入字符串长度不超过100,但是表达式计算过程中的==中间结果==是可能超过100的。 注意不要==变量名冲突==。 仔细审题,有些坑很细,如:计算过程总数字==不超过==2^31^,但是可能等于,那int类型就不够了。 如果==重载==了函数,修改其中一个时可能其它的也需要修改 输出==格式==其实挺烦的,有时题目不会说很清楚,甚至就必须有行末空格。
点赞 3
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 16:43
门头沟学院 Java
面试官:进程通信方式有哪些?我被问倒了!
面试官:看你简历上写了不少多线程、分布式相关的项目,我们来聊聊进程通信吧。你知道进程之间有哪些通信方式吗? 我:进程通信?这个...我只记得管道和共享内存,其他的有点模糊了... 解析答案 进程通信基础概念 进程通信(IPC,Inter-Process Communication)是指在不同进程之间传播或交换信息的技术。由于每个进程都有自己独立的地址空间,一个进程不能直接访问另一个进程的变量和数据结构,所以操作系统必须提供专门的机制来实现进程间的通信。 主要通信方式详解 1. 管道(Pipes) 管道是最古老的进程通信方式之一,它本质是一个内核缓冲区,提供单向通信能力。 特点: 单向通信,...
大学四年面经(学院本)
点赞
评论
收藏
分享
10-28 21:03
已编辑
门头沟学院 前端工程师
秋招三次记错面试时间,人怎么能蠢成这样
十月份投了很多简历,不知道是不是笔试面试约太多了,整个人精神状态都有点不正常经常忘这忘那。。第一次是面一家游戏小厂,之前连着两天都是下午五点面试,结果我也迷迷糊糊以为那天也是,然鹅实际上约的是下午两点,睡梦中被电话惊醒。第二次不是记错时间,是进飞书的时候忘记点加入会议了,我还以为面试官迟到了没来在那等半天。第三次是今晚,约着八点面试,不知道为啥收到信息的时候脑子里的记忆一直是八点半,可能是之前京东约面比较晚很多都是八点半。。搞混了。。。。结果被HR打电话问是不是没收到邮件,尴尬的脚趾扣地。。这两天面试应该都会让面试官觉得我不太想面试,可能是这家公司我不是很想去,最近对面试态度很消极就没太重视,...
点赞
评论
收藏
分享
10-17 12:31
重庆交通大学 技术支持工程师
秋招第一个offer
三面完当场就给offer了,但是并不是特别满意😢😢😢。。。看这个公司网上风评很一般,有没有了解公司情况的牛友
蛤蒌沃尔德:
没有我选择的权力,只有我被选择的命运
点赞
评论
收藏
分享
10-31 20:07
西安财经大学 Java
你大爷👨🏻🦳
我真没招了,像吃了一口💩,恶心坏了
喵喵喵6_6:
这薪资太哈人了
点赞
评论
收藏
分享
10-31 14:34
门头沟学院 游戏后端
cvte体验实习
今天上午答辩,问题有些没回答上来。答辩后,hr面薪资都没问,估计是挂咯
吴offer选手:
别去了 强度太大了
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
造谣刑法老师媚男,反被老师法院起诉
9909
2
...
秋招小失败-后端小小劝退(大结局)
6792
3
...
9本秋招后端收获9+offer, 我做对了什么?
5397
4
...
你们说,人会一直倒霉吗?
3530
5
...
秋招能拿多个大厂offer的其实就两种人
2144
6
...
好想被坚定地选择
1416
7
...
cvte体验实习
1349
8
...
造谣老师媚男,不料炼丹炉炸了
1233
9
...
团子今年是不是普遍涨薪了?开水团变甜了?
1201
10
...
牛客计算机考研题库全面升级,408真题+复试机试题等你来刷!
1153
创作者周榜
更多
正在热议
更多
#
校招生月薪1W算什么水平
#
40469次浏览
225人参与
#
我和mentor的爱恨情仇
#
77403次浏览
427人参与
#
“vivo”个offer
#
40847次浏览
287人参与
#
如果上班像打游戏,你最想解锁什么技能
#
9501次浏览
75人参与
#
一人一个landing小技巧
#
125020次浏览
1452人参与
#
为了实习逃课值吗?
#
31415次浏览
287人参与
#
你见过哪些工贼行为
#
26682次浏览
134人参与
#
被同事甩锅了怎么办
#
23887次浏览
100人参与
#
HR问:你期望的薪资是多少?如何回答
#
66886次浏览
649人参与
#
你的秋招第一场笔试是哪家
#
258179次浏览
2026人参与
#
vivo工作体验
#
28903次浏览
125人参与
#
哪一瞬间觉得自己长大了
#
39213次浏览
494人参与
#
和mentor 1on1 都聊什么?
#
1803次浏览
20人参与
#
实习吐槽大会
#
386350次浏览
2156人参与
#
工作后明白的那些道理
#
22679次浏览
225人参与
#
你想留在一线还是回老家?
#
62483次浏览
537人参与
#
我是面试官,请用一句话让我破防
#
28341次浏览
132人参与
#
中美关税战对我们有哪些影响
#
44437次浏览
372人参与
#
考研失败就一定是坏事吗?
#
149347次浏览
1080人参与
#
华为保温
#
109314次浏览
415人参与
#
中美关系回暖,你会选择出海吗?
#
8178次浏览
120人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务