题解 | #简单计算器#

简单计算器

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:45
门头沟学院 Java
里面的项目啥的真的有用吗?&nbsp;这些人是割韭菜吗?
HellowordX:很简单,如果你有自己稳定的学习路线和获取知识的方式就没必要,如果你啥都不懂的小白或者里边有你感兴趣的知识,我觉得挺值,我也经常为知识付费,因为时间精力有限,很多东西我不可能自己重复造轮子
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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