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