题解 | #简单计算器#

简单计算器

https://www.nowcoder.com/practice/5759c29a28cb4361bc3605979d5a6130

#include<iostream>
#include<cstdio>
#include<map>
#include<stack>
#include<string>

using namespace std;
map<char,int> prio={
	{'$',0},{'+',1},{'-',1},{'*',2},{'/',2}
};

int main(){
	char arr[200];
	while(fgets(arr,200,stdin)!=NULL){
		string line=arr;
		line.pop_back();
		if(line=="0"){
			break;
		}
		line.push_back('$');
		string str;
		stack<double> num;
		stack<char> oper;
		for(int i=0;i<line.size();i++){
			if('0'<=line[i]&&line[i]<='9'){
				str.push_back(line[i]);
			}
			else if(line[i]==' '){
				if(str!=""){
					num.push(stod(str));
				str="";
				}
				
			}else{
				if(line[i]=='$'){
					if (str!=""){
						num.push(stod(str));
						str="";
					}
				}
				while(!oper.empty()&&prio[line[i]]<=prio[oper.top()]){
				char operate=oper.top();
				oper.pop();
				double rhs=num.top();
				num.pop();
				double lhs=num.top();
				num.pop();
				
				switch(operate){
					case'+':
						num.push(rhs+lhs);
						break;
					case'-':
						num.push(lhs-rhs);
						break;
					case'*':
						num.push(rhs*lhs);
						break;
					case'/':
						num.push(lhs/rhs);
						break;		
				}
								
				}
				oper.push(line[i]);
				
			}
		}printf("%.2lf",num.top());
	}
	return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-23 17:32
那如果是字节外包呢?据我所知工牌无区别&nbsp;可以晒出去装X的那种
秋盈丶:残酷的是,都一样,管你是不是字节,不过我是很反对这种的,本是同根生,市场行情决定了用工的模式会有很多外包,分层只是单纯为了筛选
点赞 评论 收藏
分享
运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务