博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSUST 1506 ZZ的计算器 模拟题
阅读量:5170 次
发布时间:2019-06-13

本文共 1695 字,大约阅读时间需要 5 分钟。

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

解题报告:一个可以说麻烦的模拟题,我们可以这样,输入以字符串的形式输入,然后将输入先做一遍预处理,预处理要完成的是将其中所有的操作数和运算符号分开,我的做法是将操作数存放在一个数组里面,然后将运算符号也按同样的顺序存放在另一个数组里面,然后把所有的减法的运算转换成加上一个负数,这样在最后处理的时候就可以变得更简便,然后下一步就是运算处理,这一步我分成了两步来做,第一步,把其中所有的乘法和除法都算出来,然后这里有一个技巧就是将算出来的结果放在第二个位置,即加入一个数组有两位,现在要运算2*3,存放在数组里面的数是str[0] = 2,str[1] = 3;然后经过运算之后变成了这样,str[0] = 0,str[1] = 6;这里记住,一定要放在第二个位置,因为运算是逐渐往后的,如果放在前面的话,那后面的以为就必须是0,那么在0后面的数就只能和0进行运算了,同时在做除法的时候不要忘了一个东西就是在做之前,先判断被除的数是否为0,如果为0则推出,直接输出impossible。接下来的一步就很简单了,就是将经过上面各种操作的数组加起来就可以了,结果就得到了,另外很重要的一点就是这题的数据范围较大,要用long long型。下面给出代码:

1 #include
2 #include
3 #include
4 const int MAX = 1000+5; 5 typedef long long ll; 6 char str[MAX]; 7 ll str1[MAX],str2[MAX]; 8 9 ll atoll(char* p) { //将一个字符串转化成long long型的数 10 int len = strlen(p);11 ll sum = 0;12 for(int i = 0;i
='0'&&str[i]<='9')28 x[j++] = str[i++];29 x[j] = NULL; //这个很重要,不然strlen测不出长度 30 str1[tot] = atoll(x);31 if(ye) { //如果这个数对应的操作是减法的话,直接将这个数转化成负数 32 str1[tot]*=-1;33 ye = 0;34 }35 if(str[i] == NULL) //当处理到最后一个数时,要及时推出 36 break;37 if(str[i]=='+')38 str2[tot] = 1;39 else if(str[i] == '-') {40 str2[tot] = 2;41 ye = 1;42 }43 else if(str[i] == '*')44 str2[tot] = 3;45 else str2[tot] = 4;46 tot++;47 }48 bool flag = 0;49 for(int i = 0;i
View Code

 

转载于:https://www.cnblogs.com/xiaxiaosheng/p/3209510.html

你可能感兴趣的文章
[置顶] ListBox控件的数据绑定
查看>>
链表插入排序
查看>>
http://blog.csdn.net/yunye114105/article/details/7997041
查看>>
设计模式这个东西 刚刚发现几种模式好像大同小异啊
查看>>
关于 主键和外键
查看>>
python集合的交,差,并,补集合运算汇总
查看>>
校园分期支付的机遇和风险
查看>>
怕忘记-windows 2003服务器安装Node.js NPM
查看>>
一鍵分享(優化后)
查看>>
dcm4che 的依赖无法下载
查看>>
cygwin主要命令
查看>>
多线程存在哪些风险
查看>>
洛谷P2692 覆盖 题解
查看>>
Linux下清理内存和Cache方法见下文:
查看>>
【AngularJs-模块篇-Form篇】
查看>>
支持向量基
查看>>
单链表 类
查看>>
类的组合 构造函数的用法
查看>>
ORACLE SQL:经典查询练手第三篇
查看>>
ubuntu 包管理
查看>>