算法-简单的四则运算
2015-04-12 11:41
441 查看
•问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注: 1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
• 要求实现函数:
int calculate(int len,char *expStr)
【输入】 int len: 字符串长度;
char *expStr: 表达式字符串;
【输出】 无
【返回】 计算结果
• 示例
1) 输入:char *expStr = “1+4*5-8/3”
函数返回:19
2) 输入:char *expStr = “8/3*3”
函数返回:6
注: 1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
• 要求实现函数:
int calculate(int len,char *expStr)
【输入】 int len: 字符串长度;
char *expStr: 表达式字符串;
【输出】 无
【返回】 计算结果
• 示例
1) 输入:char *expStr = “1+4*5-8/3”
函数返回:19
2) 输入:char *expStr = “8/3*3”
函数返回:6
#include <iostream> using namespace std; int calculate(int len,char *expStr) { struct opStack{ char op[200]; int top; }opStack; opStack.top = -1; int i=0; int t=0; //当前后缀表达式长度 char ch = expStr[0]; while(ch!='\0'){ //转换为后缀表达式 switch(ch){ case '+': case '-': while(opStack.top != -1){ expStr[t] = opStack.op[opStack.top]; opStack.top--; t++; } opStack.top++; opStack.op[opStack.top] = ch; break; case '*': case '/': while(opStack.top!=-1 && (opStack.op[opStack.top]=='*'||opStack.op[opStack.top]=='/')){ expStr[t] = opStack.op[opStack.top]; opStack.top--; t++; } opStack.top++; opStack.op[opStack.top] = ch; break; default: expStr[t] = ch; t++; break; } i++; ch = expStr[i]; } while(opStack.top!=-1){ //将所有剩余运算符出栈 expStr[t] = opStack.op[opStack.top]; opStack.top--; t++; } expStr[t] = '\0'; cout<<expStr<<endl; struct data{ int numeric[200]; int top; }data; data.top =-1; ch = expStr[0]; int temp; t = 0; i = 0; while(ch != '\0'){ if('0'<=ch && ch<='9'){ data.top++; data.numeric[data.top] = ch - '0'; } else if(ch == '+'){ temp = data.numeric[data.top-1] + data.numeric[data.top]; data.top--; data.numeric[data.top] = temp; } else if(ch == '-'){ temp = data.numeric[data.top-1] - data.numeric[data.top]; data.top--; data.numeric[data.top] = temp; } else if(ch == '*'){ temp = data.numeric[data.top-1] * data.numeric[data.top]; data.top--; data.numeric[data.top] = temp; } else if(ch == '/'){ if(data.numeric[data.top] == 0){ cout<<"can not be zero of divide"<<endl; exit(1); } temp = data.numeric[data.top-1] / data.numeric[data.top]; data.top--; data.numeric[data.top] = temp; } i++; ch = expStr[i]; } return data.numeric[data.top]; } int main() { char exp[] = "1+2*3-4"; int n = strlen(exp); cout<<exp<<endl; int result = calculate(n,exp); cout<<result<<endl; system("pause"); return 0; }
相关文章推荐
- 字符串四则运算表达式的算法
- 四则运算算法,欢迎拍砖
- VB+浮点运算的的简单算法
- 栈的应用,实现简单的不带括号的四则运算
- 四则运算核心算法(开源)
- 大整数四则运算算法与实现(C++)
- <Power Shell>01 四则运算和数组简单使用
- 自己写得C++简单的四则运算小程序
- Linux shell实现 四则运算(整数及浮点) 简单方法
- java语言的科学与艺术-编程练习---简单的四则运算计算器
- Flex & GNU Bison 简单四则混合运算
- 简单的四则运算
- linux shell 实现 四则运算(整数及浮点) 简单方法
- C++ 通过main()函数输入参数,实现简单的四则运算
- 一个简单的四则运算源代码
- 学习C++的成果,一个简单的四则运算计算器内核
- 调用 VBScript 计算简单的四则混合运算数学题
- 一个简单的四则运算程序C语言实现--无法处理括号
- Redy语法分析--一个简单的四则运算计算器
- 四则运算算法实现