`
linest
  • 浏览: 150276 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

06 复试 简单计算器

    博客分类:
  • acm
 
阅读更多
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。

样例输入
1 + 2
4 + 2 * 5 - 7 / 11
0
样例输出
3.00
13.36

思路:由于是非负数参与,将运算符转化成负数,便于存储处理。
先扫描一遍将所有乘除法解决,废弃的内容标记成一个负数。再扫描一遍运算加减法。

#include<iostream>
using namespace std;
#include<vector>
#include<stdio.h>
#include<map>

vector<double> v;

void cal(vector<double> v)
{
	double res=0;
	int op;
	//cal * and /
	for(int i=0;i<v.size();i++)
	{
		if(v[i]==-3)
		{
			v[i+1] = v[i-1]*v[i+1];
			v[i] = -5;
			v[i-1] = -5;
		}
		else if(v[i]==-4)
		{
			v[i+1] = v[i-1]/v[i+1];
			v[i] = -5;
			v[i-1] = -5;
		}
	}

	for(int i=0;i<v.size();i++)
	{
		if(v[i]!=-5)
		{
			res = v[i];
			break;
		}
	}

	op = 0;
	//cal + and -
	for(int i=1;i<v.size();i++)
	{
		if(v[i]==-1)
			op = -1;
		else if(v[i]==-2)
			op = -2;
		else if(v[i] != -5)
		{
			if(op == -1)
				res+=v[i];
			else if(op == -2)
				res-=v[i];
		}

	}
	printf("%.2f\n",res);
}

int main()
{
	double num;
	char op;
	char ch;
	while(1)
	{
		cin>>num;
		v.clear();
		v.push_back(num);

		ch = getchar();

		if(num==0&&ch=='\n')
			break;
		
		while(ch!='\n')
		{
			cin>>op;
			if(op =='+')
				v.push_back(-1);
			else if(op =='-')
				v.push_back(-2);
			else if(op=='*')
				v.push_back(-3);
			else if(op=='/')
				v.push_back(-4);
			cin>>num;
			v.push_back(num);
			ch = getchar();
		}
		
		cal(v);
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics