HDU 1237 简单计算器


题目意思就是做一个连括号都没有的简单计算器,最后答案保留两位小数

这是一道水题,可以不用逆波兰表达式,直接用数组模拟:

每读取到一个‘+’或‘-’就将数存在数组的下一项

具体实现如下:

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;
}

题目意思就是做一个连括号都没有的简单计算器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值