题目链接: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;
}
}