BUPT复试专题—科学计算器(2009)
题目描述
输入
输出
样例输入
1 + 2 + 3 * 6 / 9 =
样例输出
5
来源
#include <bits/stdc++.h>
using namespace std;
char donser[100],temp[100];
int change(int num,int from)
{
int i=from+1,x=0;
x=temp[from]-'0';
while(i-from<num)
{
x*=10;
x+=temp[i]-'0';
i++;
}
return x;
}
int main()
{
memset(donser,0,sizeof(donser));
memset(temp,0,sizeof(temp));
while(gets(donser))
{
int i=0,j=0;
while(donser[i]!='\0')
{
if(donser[i]!=' ')
temp[j++]=donser[i];
i++;
}
i=0;
stack<int> num_stack;
stack<char> fu_stack;
while(temp[i]!='\0')
{
if(temp[i]>='0'&&temp[i]<='9')
{
int num=1,from=i;
while(temp[i+1]>='0'&&temp[i+1]<='9')
{
num++;
i++;
}
num_stack.push(change(num,from));
i++;
}
if(!fu_stack.empty())
{
if(fu_stack.top()=='*'||fu_stack.top()=='/')
{
int x=num_stack.top();
num_stack.pop();
int y=num_stack.top();
num_stack.pop();
if(fu_stack.top()=='*')
y=x*y;
else y=y/x;
num_stack.push(y);
fu_stack.pop();
}
}
if(temp[i]=='+'||temp[i]=='-'||temp[i]=='*'||temp[i]=='/')
{
fu_stack.push(temp[i]);
i++;
}
if(temp[i]=='=')
{
i++;
continue;
}
}
stack<int> num_stack_temp;
stack<char> fu_stack_temp;
while(!fu_stack.empty())
{
fu_stack_temp.push(fu_stack.top());
fu_stack.pop();
}
while(!num_stack.empty())
{
num_stack_temp.push(num_stack.top());
num_stack.pop();
}
while(!fu_stack_temp.empty())
{
int x=num_stack_temp.top();
num_stack_temp.pop();
int y=num_stack_temp.top();
num_stack_temp.pop();
if(fu_stack_temp.top()=='+')
y=y+x;
else
y=x-y;
num_stack_temp.push(y);
fu_stack_temp.pop();
}
cout<<num_stack_temp.top()<<endl;
num_stack_temp.pop();
memset(donser,0,sizeof(donser));
memset(temp,0,sizeof(temp));
}
return 0;
}
BUPT复试专题—科学计算器(2009)的更多相关文章
- BUPT复试专题—哈夫曼编码(2009)
题目描述 哈夫曼编码中 平均码长=码长×码字出现的概率 如:ABCDE 五个字符的出现次数分别为50 20 5 10 15 那么,其哈夫曼编码为A:0 B:10 C:1110 D:111 ...
- BUPT复试专题—排序(2009)
题目描述 查找序列a 中小于 b 的第 i 个数的数的个数 输入 输入有多组,每组四行第一行:序列a个数N第二行:(序列a的)N个数,升序排列第三行:序列b个数M 第四行:(序列b的)M个数,升序排列 ...
- BUPT复试专题—密码(2009)
题目描述 输入 有多组输入,每组: 第一行:由26个小写字母组成的串以空格隔开,如 b a c e u f g h i j k l m n o p q r s t v w x y z d v y ...
- BUPT复试专题—寻找第 K 小的数(2009)
题目描述 给你 n 个完全不相同整数(n<=300),每一个数都大于 0 并且小于 1000,请找出 第 k 小的数. 输入 输入包括两行,第一行用空格隔开的两个数 n 和 k;第二行有 n 个 ...
- BUPT复试专题—解析表达式(2015)
题目描述 输入一个字符串形式的表达式,该表达式中包括整数,四则运算符(+.-.*./),括号,三角函数(sin(x).cos(x).tan(x)),底数函数(lg(x).ln(x)),计算该表达式的值 ...
- BUPT复试专题—字符串转换(2013计院)
题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而"abcd"则不是简单串.现在给你一个仅由小写字母组成的字符串, ...
- BUPT复试专题—统计时间间隔(2013计院)
题目描述 给出两个时间(24小时制),求第一个时间至少要经过多久才能到达第二个时间.给出的时间一定满足的形式,其中x和y分别代表小时和分钟.0≤x<24,0≤y<60. 输入格式 第一行为 ...
- BUPT复试专题—最值问题(2013计院)
题目描述 给出N个数,求出这N个数中最大值和次大值.注意这里的次大值必须严格小于最大值.输入保证N个数中至少存在两个不同的数. 输入格式 第一行为测试数据的组数T(T≤20).请注意,任意两组测试数据 ...
- BUPT复试专题—数据库检索(2014软院)
题目描述 在数据库的操作过程中,我们进场会遇到检索操作.这个题目的任务是完成一些特定格式的检索,并输出符合条件的数据库中的所有结果. 我们现在有一个数据库,维护了学生的姓名(Name),性别(Sex) ...
随机推荐
- python爬虫入门一:爬虫基本原理
1. 什么是爬虫 爬虫就是请求网站并提取数据的自动化程序 2. 爬虫的基本流程 1)发送请求 通过HTTP库向目标站点发送请求,即发送一个Request. 请求可以包含额外的headers等信息,等待 ...
- re--模块【转】
为什么要学正则表达式 实际上爬虫一共就四个主要步骤: 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (去掉对我们没用处的数据) 处理数据(按照我们想要的 ...
- C#中何时使用dynamic
背景:比如说,有一个方法,有很多参数,且有时候只需要其中的某几个参数,有时候需要使用全部,甚至有时候一个都不需要,这时候写一个长长的参数列表一点都不酷,且容易 出错,这时候就需要考虑C#的dynami ...
- kali2018利用ss和ProxyChains实现任意应用代理
第一步:配置ss 第二步:配置proxychain vim /etc/proxychains.conf 第三步:使用proxychains 终端输入: proxychains firefox 通过代理 ...
- mysql数据库修改字段类型
修改字段类型: alter table 表名 modify column 字段名字 decimal(18, 4) ;
- nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍
一.rewrite地址重写 地址转发后客户端浏览器地址栏中的地址显示是不变的,而地址重写后地址栏中的地址会变成正确的地址. 在一次地址转发过程中只会产生一次网络请求,而一次地址重写产生两次请求. 地址 ...
- MHA的介绍和测试(一)
MHA的介绍 MySQL的MHA:MySQL的高级可用性管理器和工具MHA的主要目标是在短(通常为10-30秒)的停机时间内自动化主故障转移和slave升级,不受复制一致性问题的困扰,不需要花费大量的 ...
- LINUX远程强制重启/proc/sys/kernel/sysrq /proc/sysrq-trigger
1. # echo 1 > /proc/sys/kernel/sysrq 2. # echo b > /proc/sysrq-trigger 1. /proc/sys/ke ...
- 【Luogu】P2759奇怪的函数(二分)
题目链接 看了题解之后突然发现这题简直是水题.然而不看题解就想不出来.为什么呢? len(x)=log10(x)+1 于是二分寻找x. #include<iostream> #includ ...
- [JSOI2008]最大数 (线段树)
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度.(L>=0 ...