题目意思就是做一个连括号都没有的简单计算器,最后答案保留两位小数
这是一道水题,可以不用逆波兰表达式,直接用数组模拟:
每读取到一个‘+’或‘-’就将数存在数组的下一项
具体实现如下:
while(1) {
cin>>f>>x;
if(f=='*') {
num[g]*=x;
}
if(f=='/') {
num[g]/=x;
}
if(f=='+') {
num[g+1]=x;
g++;
}
if(f=='-') {
num[g+1]=-x;
g++;
}
if(getchar()=='\n') break;//这里用来判断换行解决读入问题
}
最后再将存数数组的每一项加起来就是最终答案了(PS:浮点数一定要用double!不然杭电给WA)
最后附上全代码:
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<cmath>
//#include<stack>
#define maxn 205
#define fu(a,b,c) for(int a=b;a<=c;a++)
using namespace std;
int g;
char f;
double x,ans;
double num[maxn];
/*int sishe(float&a){
int sw=((int)(a*1000))%10;
if(sw>4){
a+=0.01;
a-=sw*0.001;
}
}*/
int main(){
while(cin>>x){
if(x==0&&getchar()=='\n'){
break;
}
memset(num,0,sizeof(num));
num[1]=x;
g=1,ans=0;
while(1){
cin>>f>>x;
if(f=='*'){
num[g]*=x;
}
if(f=='/'){
num[g]/=x;
}
if(f=='+'){
num[g+1]=x;
g++;
}
if(f=='-'){
num[g+1]=-x;
g++;
}
if(getchar()=='\n') break;
}
fu(i,1,g+1) ans+=num[i];
// cout<<ans<<endl;
// sishe(ans);
printf("%.2lf\n",ans);
}
return 0;
}
题目意思就是做一个连括号都没有的简单计算器