题目描述:实现一个计算器,可以进行任意步的整数以内的加减乘除运算,运算符号只有+、-、*、/,求出结果。

解题报告:一个可以说麻烦的模拟题,我们可以这样,输入以字符串的形式输入,然后将输入先做一遍预处理,预处理要完成的是将其中所有的操作数和运算符号分开,我的做法是将操作数存放在一个数组里面,然后将运算符号也按同样的顺序存放在另一个数组里面,然后把所有的减法的运算转换成加上一个负数,这样在最后处理的时候就可以变得更简便,然后下一步就是运算处理,这一步我分成了两步来做,第一步,把其中所有的乘法和除法都算出来,然后这里有一个技巧就是将算出来的结果放在第二个位置,即加入一个数组有两位,现在要运算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的计算器 模拟题的更多相关文章

  1. poj 1008:Maya Calendar(模拟题,玛雅日历转换)

    Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 64795   Accepted: 19978 D ...

  2. poj 1888 Crossword Answers 模拟题

    Crossword Answers Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 869   Accepted: 405 D ...

  3. CodeForces - 427B (模拟题)

    Prison Transfer Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Sub ...

  4. sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)

    The Android University ACM Team Selection Contest Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里 ...

  5. 全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中

    题目名称 正确答案  序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer. ...

  6. UVALive 4222 Dance 模拟题

    Dance 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...

  7. cdoj 25 点球大战(penalty) 模拟题

    点球大战(penalty) Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/2 ...

  8. Educational Codeforces Round 2 A. Extract Numbers 模拟题

    A. Extract Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/pr ...

  9. 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 ...

随机推荐

  1. HTTP2初探

    背景 本文是对Google博客上文章的翻译和笔记.以及一些待解决的问题记录. Google 博客上这篇文章的中文版有很多翻译错误. 概述 HTTP/2 仍是对之前 HTTP 标准的扩展,而非替代.HT ...

  2. twig用法

    1. GyAdminBundle::base.html.twig 必须添加Bundle名才可引用模板

  3. Flask入门的第一个项目

    前言: Flask简介:Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎. 想要学习flask,又非常迷茫,不知如何下手 ...

  4. PAT甲题题解-1070. Mooncake (25)-排序,大水题

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  5. 关于如何在Tomcat中使用JavaBean

    对于没有使用myeclipse,NetBean等IDE工具的用户,如果在编写JSP时,用到了java文件,就必须配置JAVAbean了,网上也有很多在Tomcat中配置JAVABean的例子,这里我简 ...

  6. 《Linux内核设计与实现》第四章学习笔记——进程调度

                                                                        <Linux内核设计与实现>第四章学习笔记——进程调 ...

  7. Leetcode题库——49.字母异位词分组【##】

    @author: ZZQ @software: PyCharm @file: leetcode49_groupAnagrams.py @time: 2018/11/19 13:18 要求:给定一个字符 ...

  8. 默认css修改

    input-------------------------------------------------- .input-item input{ width: 100%; height: 60px ...

  9. OneZero第五周第一次站立会议(2016.4.18)

    1. 时间: 13:00--13:15  共计15分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  10. Threadlocal 传递参数(百度二面)

    去百度面试,二面的时候 面试官问 如果我想跟踪一个请求,从接收请求,处理到返回的整个流程,有没有好的办法,后来面试官说了 Threadlocal 可以做到传递参数. 这是ThreadLocal的一个功 ...