四则运算,简单的,只有个位数加减
来源:互联网 发布:怎样关闭服务器80端口 编辑:程序博客网 时间:2024/04/25 08:49
四则运算
Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
Total Submission: 82 Submission Accepted: 24
Total Submission: 82 Submission Accepted: 24
Description
给定一个四则运算表达式,包括 + - * / ( ),计算结果
Input
有N行输入,每行有一个四则运算表达式,不超过10个数字ai( 1 < = i < = 10 )。
为了简便定 0 < = ai < = 9
为了简便定 0 < = ai < = 9
Output
有N行输出,每行一个运算结果
Sample Input
OriginalTransformed1+15/2
Sample Output
OriginalTransformed22.5
#include<stdio.h>
#include<string.h>#define Max 200
typedef struct node
{
int tail;
int head;
char a[200];
}queue;
void create(queue&);
void enqueue(char ,queue&);
char dequeue(queue&);
int empty(queue);
int full(queue);
void change(char *);
double suan();
queue q;
char stack[200];
double Stack[200];
int top;
int main()
{
char s[200];
int n,sl;
while(scanf("%s",&s)!=EOF)
{
sl=strlen(s);
s[sl]=';';
s[sl+1]='\0';
change(s);
printf("%g\n",suan());
}
return 0;
}
void change(char *s)
{
int sl,i,t;
int privilege(char );
sl=strlen(s);
create(q);
top++;
stack[top]='(';
for(i=0;i<sl;i++)
{
switch(s[i])
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': enqueue(s[i],q);break;
case '(': top++;stack[top]=s[i];break;
case ')':
case ';':
do{
t=stack[top];
top--;
if(t!='(')
enqueue(t,q);
}while(t!='('&&top!=-1); break;
case '+':
case '-':
case '*':
case '/':
while(privilege(s[i])<=privilege(stack[top]))
{
t=stack[top];
top--;
enqueue(t,q);
}
top++;
stack[top]=s[i]; break;
}
}
}
int privilege(char c)
{
switch(c)
{
case '(':return 0;break;
case '-':
case '+':return 1;break;
case '*':
case '/':return 2;break;
}
}
int full(queue q)
{
if((q.tail+1)%Max==q.head) return 1;
else return 0;
}
int empty(queue q)
{
if(q.head==q.tail) return 1;
else return 0;
}
char dequeue(queue &q)
{
char c;
if(empty(q))
{
printf("UNDERFLOW!\n");
}
c=q.a[q.head];
q.head=(q.head+1)%Max;
return c;
}
void enqueue(char c,queue &q)
{
if(full(q))
{
printf("OVER FLOW!\n");
return;
}
q.a[q.tail]=c;
q.tail=(q.tail+1)%Max;
}
void create(queue &q)
{
q.head=q.tail=0;
}
double suan()
{
char t;
double x,y;
int top=-1;
while(!empty(q))
{
t=dequeue(q);
if(t>='0'&&t<='9')
{
top++;
Stack[top]=(int)t-'0';
}
else
{
y=Stack[top];
top--;
x=Stack[top];
top--;
switch(t)
{
case '+':top++;Stack[top]=x+y;break;
case '*':top++;Stack[top]=x*y;break;
case '/':top++;Stack[top]=x/y;break;
case '-':top++;Stack[top]=x-y;break;
}
}
}
return Stack[top];
}
- 四则运算,简单的,只有个位数加减
- java简单计算器实现,只有四则运算
- 简单的混合四则运算
- 简单的四则运算
- 简单的四则运算!【练习】
- 算法-简单的四则运算
- 简单的四则运算计算器
- 简单的四则运算计算器
- 简单的四则运算
- 高精度四则运算---加减
- 一个简单的四则运算源代码
- 一个简单的四则运算计算器
- 简单的web四则运算计算器
- textbox之间简单的四则运算
- 栈的应用--简单四则运算
- DataExcel 执行简单的四则运算
- 分数加减的简单运算
- 简单四则运算
- 开源软件清除了“开源”和“商业”之间的障碍——商业软件、开源软件和自由软件的区别
- 用单链表实现stack
- 树表查找之二叉排序树
- tbr tbn tbc
- android:SDL init failure, reason is: No available video device
- 四则运算,简单的,只有个位数加减
- 解析成功手机游戏的10种特征和共性
- 温故知新
- 黑马程序员_html常用标签1
- python2.5中使用OpenCV
- 'PIO_STACK_LOCATION' : illegal use of this type as an expression
- 黑马程序员_html常用标签2
- windows消息列表
- js跳转页面方法(转)