四则运算+判断
来源:互联网 发布:手机淘宝上传店招 编辑:程序博客网 时间:2024/06/09 23:59
问题 B 数据结构作业02 -- 四则运算表达式计算
时间限制: 1 Sec 内存限制: 128 MB[提交]
题目描述
计算非负整常数四则运算表达式,可用的运算符有:+ - * / ( ) 。
输入
一组非负整常数四则运算表达式,每个表达式输入一行,长度不超过1024个字符。
输出
每个表达式的计算结果输出一行,错误的表达式输出error。
样例输入
12+5-4-73-*5((12-3)/2)+53+7/(2-2)
样例输出
17errorerror9error
#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;char s[100001];int pan(int len){ int i; int t; int acc=0,bcc=0; for(i=0;i<len-1;i++){ if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){ if(s[i+1]=='+'||s[i+1]=='-'||s[i+1]=='*'||s[i+1]=='/') return 1; } else if(s[i]==')'){ if(s[i+1]=='(') return 1; } else if(s[i]=='('){ if(s[i+1]==')') return 1; } } if(s[len-1]=='+'||s[len-1]=='-'||s[len-1]=='*'||s[len-1]=='/') return 1; for(i=len-1;i>=0;i--){ if(s[i]==')') bcc++; else if(s[i]=='(') acc++; } if(acc!=bcc){ return 1; } char pei[10001]; int toppei=-1; i=0; while(i<len){ if(s[i]=='('){ toppei++; pei[toppei]=s[i]; i++; } else if(s[i]==')'&&toppei>=0){ toppei--; i++; } else if(s[i]==')'&&toppei==-1) return 1; else i++; } if(toppei!=-1) return 1; return 0;}int main(){ int num=0; int flag=0; while(~scanf("%s",s)){ int len=strlen(s); int i,j; for(i=0;i<len;i++) a[i]=9999; //for(i=0;i<10;i++) //printf("%d\n",a[i]); flag=pan(len); //printf("%d",flag); i=0; while(i<len&&flag!=1){ 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]!='('&&topc>=0){ topab++; b[topab]=c[topc];//printf("%c\n",b[topab]); topc--; if(topc==-1){flag=1;break;} } topc--; i++; } else{ if(s[i]=='-'){ if(i==0){ flag=1; break; } else{ if(s[i-1]=='('){ flag=1; break; } 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{ if(topj-1>=0){ 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; } } else{flag=1;break;} } } if(flag==0){ if(ji[0]>=0) printf("%d\n",ji[0]); else printf("error\n"); } else{ printf("error\n"); } flag=0; topab=-1; topj=-1; } return 0;}
0 0
- 四则运算+判断
- (未完)四则运算溢出判断
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 四则运算
- 3ds Max中去掉重复点的技巧
- 这文章介绍了Linux下rootkit常见玩法-Linux Rootkit Sample && Rootkit Defenser Analysis - .Little Hann - 时间 2014-
- neuq oj1063: 谭浩强C语言(第三版)习题8.3 求素数 C++
- C# 解决 调用线程非安全的控件xx不是在本线程上创建 异常
- LeetCode *** 73. Set Matrix Zeroes
- 四则运算+判断
- C/C++ 进阶 —— 指向指针的指针
- 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大
- 【深度学习】web版一键训练系统
- android:dp,px,sp概念及之间转换
- 2.1.2 个人环境的使用
- 【openjudge 7603】[1.7编程基础之字符串] 34:回文子串
- css 伪元素的初次使用
- 页面跳转与重定向