资源简介
描述
编写一个程序可以完成基本的带括号的四则运算。其中除法(/)是整除,并且在负数除法时向0取整。(C/C++/Java默认的除法就是向0取整,python默认的是向负无穷取整。)
例如计算 100 * ( 2 + 12 ) - (20 / 3) * 2, 结果是1388。
输入
一个长度不超过100的字符串,代表要计算的算式。包含数字0-9以及+-*/()。
输入保证计算过程不会超过32位有符号整数,并且其中的'-'都是减号没有负号。
代码片段和文件信息
100*(2+12)-(20/3)*2
100*(2-12)+(20/3)*(1-2)
10*(3+5*(5-5+1)*100+(5-9*(20-2)/2)*2*20/10)+1000
2/3-10
2+(2*4)
50/(50-20*2+1-9)*(10+12*12-12*10)
50*(50-20*2+1-9)*(10+12*12-12*10)/(1*2*3*4*5*6)
(1)+(1+2)+2*(1+3)
100*(2+12)-20/3*2
7*(8+2-(8/2+5*4))
3+((12+7*9)-15)
((5*(8+7)-5)+30*(7-6/3))*7
8/4*2
8/2*4
#include
#include
#include
#include
using namespace std;
void step(stack& num stack& op) {
char top = op.top();
op.pop();
int a b;
b = num.top();
num.pop();
a = num.top();
num.pop();
//cout << a << top << b << “=“;//
if (top == ‘+‘)
a += b;
else if (top == ‘-‘)
a -= b;
else if (top == ‘*‘)
a *= b;
else a /= b;
//cout << a << endl;//
num.push(a);
}
bool cmp(char top char c) {
if (top == ‘(‘) return false;
if (top == ‘+‘ || top == ‘-‘) {
if (c == ‘+‘ || c == ‘-‘)
return true;
return false;
}
return true;
}
void pushOp(stack& num stack& op char c) {
if (c == ‘)‘) {
for (; op.top() != ‘(‘;)
step(num op);
op.pop();
return;
}
if (op.empty() || op.top() == ‘(‘) {
//cout << “New: “ << c << endl;//
op.push(c);
return;
}
//cout << “Top: “ << op.top() << “ >> “ << “New: “ << c << endl;//
for (; cmp(op.top() c);) { //For the order of calculating
step(num op);
if (op.empty()) break;
}
op.push(c);
}
int getNum(char* line int& i int len) {
int a;
sscanf(line + i “%d“ &a);
//cout << a << endl;//
for (; i < len && line[i] >= ‘0‘ && line[i] <= ‘9‘; i++);
return a;
}
int main() {
stack num;
stack op;
char line[101];
int i len;
for (; scanf(“%s“ line) != EOF;) {
i = 0;
len = strlen(line);
for (; line[i] == ‘(‘; i++) //I‘s like to get many ‘(‘ continously
op.push(‘(‘);
num.push(getNum(line i len));
for (; i < len;) {
for (; line[i] == ‘)‘; i++) //It‘s the same with ‘(‘
pushOp(num op line[i]);
if (i >= len) break;
pushOp(num op line[i++]);
for (; line[i] == ‘(‘; i++) //...
op.push(‘(‘);
num.push(getNum(line i len));
}
for (; !op.empty();)
step(num op);
i = num.top();
num.pop();
//cout << “Empty: “ << num.size() << endl;
printf(“%d\n“ i);
}
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2290 2017-09-29 16:30 Caculator.cpp
----------- --------- ---------- ----- ----
2290 1
相关资源
- 带括号和小数点的java计算器程序
- RX3399开发板Android双屏异触解决C++文件
- C、Java和Python的BNF范式
- c++餐饮管理系统源代码
- 一个java编写的简易计算器源码 实现简
- 读取LCM的日志文件
- C++、VB、DELPHI、JAVA、C#调用DLL
- 华为C++/C/java代码规范完整版
- Functional Programming with C++
- notepad++ 7.4.2带插件管理
- c++ AES 兼容 JAVA AES CBC PKCS5Padding C#
- VC++实现通过adb检测android设备是否连接
- c++客户端和javaNetty服务器端tcp通讯
-
NppAst
yle用于格式化Notepad中编辑的 - C++与android通过socket通信(上个版本端
- C++ Primer Plus(Cpp Primer)第6版中文版源
- C++ 实现序列化
- c++ 电池管理
- android计算器源码(实现了加减乘除)
- android计算器demo可以实现连续加减乘除
- Android-ndk-jni AES加解密 C++
- 简单计算器的aia
- 用Java编写的可以进行加减乘除计算的
- Qt for Android之2048实现
- 水壶问题java c++
- java服务端,C++客户端,基于protobuf的
- Java坦克大战源码
评论
共有 条评论