// 九度27 简易计算器.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
char input[205];
map<char,int> changeSymbol;
map<int,char> Symbolchange;
void initSymbol()
{
changeSymbol['+'] = -5;
changeSymbol['-'] = -4;
changeSymbol['*'] = -1;
changeSymbol['/'] = -2;
}
int main( )
{
int i,j;
double n,s1,s2;
initSymbol();
while (gets(input)&&strcmp(input,"0")!=0)
{
vector<double> result;
vector<char> symbol;
for(i=0; i < strlen(input); i++)
{
if(' ' == input[i]) continue;
if(changeSymbol.end() == changeSymbol.find(input[i]))//不是符号+-*/ 数字处理
{
j = i+1;
n = input[i] - '0';
while(input[j]!=' '&&input[j]!='\0')
{
n *=10;
n +=input[j++] - '0';
}
i = j;
result.push_back(n);
}
else//符号处理
{
if(input[i] == '*')
{
double t = result.back();
i += 2;
j = i+1;
n = input[i] - '0';
while(input[j]!=' '&&input[j]!='\0')
{
n *=10;
n +=input[j++] - '0';
}
i = j;
result.pop_back();
result.push_back(t*n);
}
else if(input[i] == '/')
{
double t = result.back();
i += 2;
j = i+1;
n = input[i] - '0';
while(input[j]!=' '&&input[j]!='\0')
{
n *=10;
n +=input[j++] - '0';
}
i = j;
result.pop_back();
result.push_back(double(t)/double(n));
}
else
{
symbol.push_back(input[i]);
}
}
}//此时乘除法已经解决!!!接下来从正负号中做
if(result.size() != 1)
{
vector<char>::iterator hr = symbol.begin();//要从头开始计算
vector<double>::iterator cx = result.begin();//要从头开始计算
while(hr != symbol.end())
{
if((*hr) == '+')
{
s1 = *cx;
cx++;
s2 = *cx;
*cx = (s1+s2);
}
if((*hr) == '-')
{
s1 = *cx;
cx++;
s2 = *cx;
*cx = (s1-s2);
}
hr++;
}
}
printf("%.2f\n",result.back());
}
return 0;
}
/**************************************************************
Problem: 1019
User: hrdjmax2
Language: C++
Result: Accepted
Time:0 ms
Memory:1528 kb
****************************************************************/
九度题目1019:简单计算器 2006年浙江大学计算机及软件工程研究生机试真题
最新推荐文章于 2020-10-21 18:50:55 发布