CSUST 1506 ZZ的计算器 模拟题
题目描述:实现一个计算器,可以进行任意步的整数以内的加减乘除运算,运算符号只有+、-、*、/,求出结果。
解题报告:一个可以说麻烦的模拟题,我们可以这样,输入以字符串的形式输入,然后将输入先做一遍预处理,预处理要完成的是将其中所有的操作数和运算符号分开,我的做法是将操作数存放在一个数组里面,然后将运算符号也按同样的顺序存放在另一个数组里面,然后把所有的减法的运算转换成加上一个负数,这样在最后处理的时候就可以变得更简便,然后下一步就是运算处理,这一步我分成了两步来做,第一步,把其中所有的乘法和除法都算出来,然后这里有一个技巧就是将算出来的结果放在第二个位置,即加入一个数组有两位,现在要运算2*3,存放在数组里面的数是str[0] = 2,str[1] = 3;然后经过运算之后变成了这样,str[0] = 0,str[1] = 6;这里记住,一定要放在第二个位置,因为运算是逐渐往后的,如果放在前面的话,那后面的以为就必须是0,那么在0后面的数就只能和0进行运算了,同时在做除法的时候不要忘了一个东西就是在做之前,先判断被除的数是否为0,如果为0则推出,直接输出impossible。接下来的一步就很简单了,就是将经过上面各种操作的数组加起来就可以了,结果就得到了,另外很重要的一点就是这题的数据范围较大,要用long long型。下面给出代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
const int MAX = +;
typedef long long ll;
char str[MAX];
ll str1[MAX],str2[MAX]; ll atoll(char* p) { //将一个字符串转化成long long型的数
int len = strlen(p);
ll sum = ;
for(int i = ;i<len;++i)
sum = *sum+p[i]-'';
return sum;
} int main() {
while(scanf("%s",str)!=EOF) {
memset(str1,,sizeof(str1));
memset(str2,,sizeof(str2));
int len = strlen(str);
int tot = ;
bool ye = ;
for(int i = ;i<len;++i) {
char x[MAX];
int j = ;
while(str[i]>=''&&str[i]<='')
x[j++] = str[i++];
x[j] = NULL; //这个很重要,不然strlen测不出长度
str1[tot] = atoll(x);
if(ye) { //如果这个数对应的操作是减法的话,直接将这个数转化成负数
str1[tot]*=-;
ye = ;
}
if(str[i] == NULL) //当处理到最后一个数时,要及时推出
break;
if(str[i]=='+')
str2[tot] = ;
else if(str[i] == '-') {
str2[tot] = ;
ye = ;
}
else if(str[i] == '*')
str2[tot] = ;
else str2[tot] = ;
tot++;
}
bool flag = ;
for(int i = ;i<tot;++i) //运算过程
if(str2[i]==) {
str1[i+] *= str1[i];
str1[i] = ;
}
else if(str2[i] == ) {
if(str1[i+]==) {
flag = ;
break;
}
str1[i+] = str1[i]/str1[i+];
str1[i] = ;
}
if(flag) { //出现除数为0 的情况
printf("impossible\n");
continue;
}
ll ans = ;
for(int i = ;i<=tot+;++i)
ans+=str1[i];
printf("%lld\n",ans);
str[] = NULL; //将输入的数组清空,很重要
}
return ;
}
CSUST 1506 ZZ的计算器 模拟题的更多相关文章
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- poj 1888 Crossword Answers 模拟题
Crossword Answers Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 869 Accepted: 405 D ...
- CodeForces - 427B (模拟题)
Prison Transfer Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Sub ...
- sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
The Android University ACM Team Selection Contest Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里 ...
- 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...
- UVALive 4222 Dance 模拟题
Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...
- cdoj 25 点球大战(penalty) 模拟题
点球大战(penalty) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/2 ...
- Educational Codeforces Round 2 A. Extract Numbers 模拟题
A. Extract Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/pr ...
- URAL 2046 A - The First Day at School 模拟题
A - The First Day at SchoolTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...
随机推荐
- ping命令使用及其常用参数
PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量检查网络是否连通,可以很好地帮助我们分析和判定网络故障.Ping发送一个ICMP(Internet Con ...
- Selenium--调用js,对话框处理 (python)
前言: 本次教程针对Python语言,selenium教程(调用js,对话框处理) 一.对话框处理 更多的时候我们在实际的应用中碰到的并不是简单警告框,而是提供更多功能的会话框. 本节重点: 1.打开 ...
- 个人作业Week2-代码复审
代码复审Check List 概要部分 代码能符合需求和规格说明么? 符合.针对-c和-s可以将正确的结果输出到相应的sudoku.txt,并在规定的时间内求解. 代码设计是否有周全的考虑? 有的.我 ...
- docker cp 和docker exec 查看docker 运行的容器信息
1. 使用docker 运行 redis 和 postgresql docker run -d -p : -v /redis/data/:/data redis docker run -d -p : ...
- OneZero第五周第一次站立会议(2016.4.18)
1. 时间: 13:00--13:15 共计15分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...
- 数据库中增加操作insert into的用法和查询select的用法
insert into的用法 1.一条insert into 可以插入多条记录 2.insert into 能判断主键是否冲突,和做出冲突处理 如果主键冲突的话会报错,还能写成如果冲突就更新的形式格式 ...
- python的logging日志模块
1. 简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info mess ...
- spring 事务传播 never 当一个业务方法设置为never时候表示 不会加入任何事务中
- Grafana elasticsearch 应用
早期的时候,项目基于ES+echart写了一些仪表盘的展示页面,虽然ES配合这种char界面有着天然的优势,但实际写起代码来,还是很多重复的劳动,在一次偶然中发现Grafana,看到它提供了很多仪表盘 ...
- BZOJ2423 HAOI2010最长公共子序列(动态规划)
大讨论.注意去重. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib& ...