四则运算
来源:互联网 发布:挣钱软件 编辑:程序博客网 时间:2024/04/29 02:59
问题 I 算法3-4:表达式求值
时间限制: 1 Sec 内存限制: 128 MB[提交]
题目描述
算数四则运算的规则是1)先乘除,后加减;2)从左算到右;3)先括号内,后括号外。 由此,算式4+2*3-10/5的计算顺序为4+2*3-10/5=4+6-10/5=4+6-2=8。 给定一个以“#”作为结束符的算式,求出算式的结果。 给出严蔚敏《数据结构(C语言)》中的一段算法描述以作参考:
图1:表达式求值算法
图2:表达式求值算法(续)
图3:表达式求值算法(续
输入
以“#”结尾的表达式,运算数为正整数。每个表达式占一行。
输出
输出表达式运算的结果。
样例输入
4+2*3-10/5#3*(7-2)#2*3/2#
样例输出
8153
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<math.h>int a[100001];//存储符号char b[100001];//存储数字char c[100001];//中转栈int topc=-1;int topab=-1;int ji[10001];topj=-1;int main(){ char s[100001]; int num=0; int flag=0; while(~scanf("%s",&s)){ int len=strlen(s); len--; int i,j; for(i=0;i<len;i++) a[i]=9999; //for(i=0;i<10;i++) //printf("%d\n",a[i]); i=0; while(i<len){ if(isdigit(s[i])==1){ while(isdigit(s[i])==1){ num*=10; num+=s[i]-48; i++; } topab++; a[topab]=num; num=0; } else if(s[i]=='('){ topc++; c[topc]=s[i]; i++; } else if(s[i]==')'){ while(c[topc]!='('){ topab++; b[topab]=c[topc];//printf("%c\n",b[topab]); topc--; } topc--; i++; } else{ if(s[i]=='-'){ if(i==0){ i++; num=0; while(isdigit(s[i])==1){ num*=10; num+=s[i]-48; i++; } topab++; a[topab]=0-num; num=0; } else{ if(s[i-1]=='('){ i++; num=0; while(isdigit(s[i])==1){ num*=10; num+=s[i]-48; i++; } topab++; a[topab]=0-num; num=0; } else{ while(c[topc]!='('&&topc>=0){ topab++; b[topab]=c[topc];//printf("%c\n",b[topab]); topc--; if(topc==-1) break; } topc++; c[topc]=s[i]; i++; } } } else if(s[i]=='+'){ while(c[topc]!='('&&topc>=0){ topab++; b[topab]=c[topc];//printf("%c\n",b[topab]); topc--; if(topc==-1) break; } topc++; c[topc]=s[i]; i++; } else if(s[i]=='*'||s[i]=='/'){ while((c[topc]=='*'||c[topc]=='/')&&topc>=0){ topab++; b[topab]=c[topc];//printf("%c\n",b[topab]); topc--; if(topc==-1) break; } topc++; c[topc]=s[i]; i++; } } } while(topc>=0){ topab++; b[topab]=c[topc];//printf("%c\n",b[topab]); topc--; } /*for(i=0;i<=topab;i++){ if(a[i]!=9999) printf("%d\n",a[i]); else printf("%c\n",b[i]); }*/ for(i=0;i<=topab;i++){ if(a[i]!=9999){ topj++; ji[topj]=a[i]; } else{ switch(b[i]){ case '+':ji[topj-1]=ji[topj-1]+ji[topj];topj--;break; case '-':ji[topj-1]=ji[topj-1]-ji[topj];topj--;break; case '*':ji[topj-1]=ji[topj-1]*ji[topj];topj--;break; case '/':if(ji[topj]!=0){ ji[topj-1]=ji[topj-1]/ji[topj]; topj--; } else{ flag=1; } break; default:break; } } } if(!flag){ printf("%d\n",ji[0]); } flag=0; topab=-1; topj=-1; } return 0;}
0 0
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 2.1.2 个人环境的使用
- 【openjudge 7603】[1.7编程基础之字符串] 34:回文子串
- css 伪元素的初次使用
- 页面跳转与重定向
- Android Studio2.0运行报错:Error running app: Instant Run requires 'Tools | Android | Enable ADB integrat
- 四则运算
- java实现随机洗牌算法
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
- nyoj806 HEIHEI的心情
- 二次贝塞尔曲线的实现(基于Canvas与JavaScript)
- 安卓逆向工程--针对授权key方式的破解
- 腾讯实习生面试题--替换字符串中指定子串
- 2.2.1 鸟哥的Linux学习之路
- 【碎知识】id符号、id与name的区别