首页 > 代码库 > 表达式求值
表达式求值
表达式求值
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出它的值的计算器,现在请你帮助他来实现这个计算器吧。
比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)- 输入
- 第一行输入一个整数n,共有n组测试数据(n<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0 - 输出
- 每组都输出该组运算式的运算结果,输出结果保留两位小数。
- 样例输入
2 1.000+2/4= ((1+2)*5+1)/4=
- 样例输出
1.50 4.00
代码:
#include<stdio.h>double fun(double a,double b,char ch){ if(ch==‘+‘) return b+a; if(ch==‘-‘) return b-a; if(ch==‘*‘) return b*a; if(ch==‘/‘) return b/a;}int main(void){ int i,top1,top2; int n; double x,t,a,b; double num[1000]; char str[1000],ch[1000]; scanf("%d",&n); while(n--) { scanf("%s",str); top1=-1; top2=-1; for(i=0;str[i]!=‘\0‘;i++) { x=0; if(str[i]>=‘0‘&&str[i]<=‘9‘) { while(str[i]>=‘0‘&&str[i]<=‘9‘) { x=x*10+str[i]-‘0‘; i++; } if(str[i]==‘.‘) { i++; t=0.1; while(str[i]>=‘0‘&&str[i]<=‘9‘) { x=x+(str[i]-‘0‘)*t; t=t*0.1; i++; } } top1++; num[top1]=x; } if(str[i]==‘\0‘) break; else if(str[i]==‘(‘) { ch[++top2]=str[i]; } else if(str[i]==‘)‘) { while(top2>=0&&ch[top2]!=‘(‘) { a=num[top1]; top1--; b=num[top1]; num[top1]=fun(a,b,ch[top2]); top2--; } top2--; } else if(str[i]==‘*‘||str[i]==‘/‘) { while(ch[top2]==‘*‘||ch[top2]==‘/‘) { a=num[top1]; top1--; b=num[top1]; num[top1]=fun(a,b,ch[top2]); top2--; } ch[++top2]=str[i]; } else { while(top2>=0&&ch[top2]!=‘(‘) { a=num[top1]; top1--; b=num[top1]; num[top1]=fun(a,b,ch[top2]); top2--; } ch[++top2]=str[i]; } } while(top2>=0) { a=num[top1]; top1--; b=num[top1]; num[top1]=fun(a,b,ch[top2]); top2--; } printf("%.2f\n",num[0]); } return 0;}
表达式求值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。