前缀式计算

 题目链接:nyist 128http://acm.nyist.net/JudgeOnline/problem.php?pid=128 

知识点:
stringstream可以把string转换成double,int,long long等(方法2、3)
unget()可以把读出的字符放回字符串流中(方法2)
atof在stdlib.h中的把str字符串转换成double(方法3、4)
atoi在stdlib.h中的把str字符串转换成int;(方法3、4)
代码1:

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int pos;string str;
double fun()
{
	++pos;
	if(str[pos]==' ')++pos;
	if(str[pos]>='0'&&str[pos]<='9')
	{
		string s;
		while(pos!=str.size()&&str[pos]!=' ')
			s+=str[pos++];
		double tp;
		sscanf(s.c_str(),"%lf",&tp);
		return tp;
	}
	if(str[pos]=='+')
		return fun()+fun();
	if(str[pos]=='-')
		return fun()-fun();
	if(str[pos]=='*')
		return fun()*fun();
	if(str[pos]=='/')
		return fun()/fun();
}
int main()
{
	while(getline(cin,str))
	{
		pos=-1;
		printf("%.2lf\n",fun());

	}
}

代码2:

#include<iostream>
#include<string>
#include<stdio.h>
#include<sstream>
#include<stdlib.h>
using namespace std;
stringstream ss;//字符串流
double fun()
{
	char ch;
	double tp;
	ss>>ch;
	if(ch=='+')
		return fun()+fun();
	if(ch=='-')
		return fun()-fun();
	if(ch=='*')
		return fun()*fun();
	if(ch=='/')
		return fun()/fun();
	ss.unget();//把读出的ch字符放回ss字符串流中
	ss>>tp;    //从字符串流中读出double型数
	return tp;
}
int main()
{
	string str;
	while(getline(cin,str))
	{
		ss.clear();
		ss<<str;
		printf("%.2lf\n",fun());
	}
}

代码3:

#include<iostream>
#include<string>
#include<stdio.h>
#include<sstream>
#include<stdlib.h>
using namespace std;
stringstream ss;//字符串流
double fun()
{
	string str;
	ss>>str;
	if(str[0]=='+')
		return fun()+fun();
	if(str[0]=='-')
		return fun()-fun();
	if(str[0]=='*')
		return fun()*fun();
	if(str[0]=='/')
		return fun()/fun();
	return atof(str.c_str());//atof在stdlib.h中 把str字符串转换成double;
					//atoi在stdlib.h中 把str字符串转换成int;
}
int main()
{
	string str;
	while(getline(cin,str))
	{
		ss.clear();
		ss<<str;
		printf("%.2lf\n",fun());

	}
}

代码4:

#include<stdio.h>
#include<stdlib.h>
char str[20];
double fun()
{
	if(scanf("%s",str)==EOF)
		return 1<<30;
	if(str[0]=='+')
		return fun()+fun();
	if(str[0]=='-')
		return fun()-fun();
	if(str[0]=='*')
		return fun()*fun();
	if(str[0]=='/')
		return fun()/fun();
	return atof(str);//atof在stdlib.h中的把str字符串转换成double;
		        //atoi在stdlib.h中的把str字符串转换成int;
}
int main()
{
	while(1)
	{
		double tp=fun();
		if(tp<1<<30)
			printf("%.2lf\n",tp);
		else
			break;
	}
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值