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 ...
随机推荐
- PTA (Advanced Level) 1002 A+B for Polynomials
1002 A+B for Polynomials This time, you are supposed to find A+B where A and B are two polynomials. ...
- 《Linux内核分析》第五周:分析system_call中断处理过程
实验 分析system_call中断处理过程 使用gdb跟踪分析一个系统调用内核函数(您上周选择那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/l ...
- SQL Sever——远程过程调用失败(0x800706be)
最近重装了系统,VS和SQL Sever莫名奇妙的不能用了.下面总结一下这个过程中遇到的问题,跟大家分享一下经验~~ 大概是以前的安装过程都十分顺利,这次,在尝试了数次登陆不上去之后,我仍然怀疑是自己 ...
- 四则运算ver.mk2
package size; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JMenuBar; im ...
- Rendertron:谷歌 Chrome 新的 headless 模式又贡献了一个新的技巧
摘自:https://zhuanlan.zhihu.com/p/31670033 Rendertron:JavaScript Web 富应用的一个老问题是如何使这些页面的动态渲染部分可供搜索引擎检索. ...
- 使用ejs模板引擎
let express = require('express'); let fs = require('fs'); let ejs = require('ejs'); let app = expres ...
- Android 出现 maybe missing INTERNET permission 错误问题解决
在AndroidManifest.xml中,需要进行如下配置:<manifest> //加入以下许可 <uses-permission android:name="andr ...
- ThinkPHP从零开始(一)安装和配置
序: 对PHP一无所知的我,将从这里从零开始. 1.下载与安装 ThinkPHP的下载: ThinkPHP中文站下载页面 有 核心版和完整版两种,由于不了解.所以我选择了完整版. WampSer ...
- Delphi Try Except 实例
//判断单位转换率 try um_rate := vp_mstr.F('vp_um_rate_d').AsFloat / vp_mstr.F('vp_um_rate_m').AsFloat; then ...
- MT【83】三个等号
分析:此类三个等式的一般做法先记为$t$,则有如下做法: