标签:使用 turn 优先级 arc problem 4.0 pre gets 类型
* + 11.0 12.0 + 24.0 35.0
1357.000000
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int len,now=0; char str[100001]; double search(char type) { while((str[now]!=‘*‘&&str[now]!=‘/‘&&str[now]!=‘-‘&&str[now]!=‘+‘)&&(str[now]<‘0‘||str[now]>‘9‘)) { now++; } double a=0,b=0; if(str[now]==‘*‘||str[now]==‘-‘||str[now]==‘/‘||str[now]==‘+‘) a=search(str[now++]); else { bool if_=true; double now_=1; while((str[now]>=‘0‘&&str[now]<=‘9‘)||str[now]==‘.‘) { if(str[now]==‘.‘) { if_=false; now++; continue; } if(if_) { a=a*10+str[now]-‘0‘; now++; } else { now_*=10; a+=(str[now]-‘0‘)/now_; now++; } } } while((str[now]!=‘*‘&&str[now]!=‘/‘&&str[now]!=‘-‘&&str[now]!=‘+‘)&&(str[now]<‘0‘||str[now]>‘9‘)) { now++; } if(str[now]==‘*‘||str[now]==‘-‘||str[now]==‘/‘||str[now]==‘+‘) b=search(str[now++]); else { bool if_=true; double now_=1; while((str[now]>=‘0‘&&str[now]<=‘9‘)||str[now]==‘.‘) { if(str[now]==‘.‘) { if_=false; now++; continue; } if(if_) { b=b*10+str[now]-‘0‘; now++; } else { now_*=10; b+=(str[now]-‘0‘)/now_; now++; } } } if(type==‘*‘) return a*b; if(type==‘/‘) return a/b; if(type==‘+‘) return a+b; if(type==‘-‘) return a-b; } int main() { gets(str); len=strlen(str); printf("%.6lf",search(str[now++])); return 0; }
AC日记——逆波兰表达式 openjudge 3.3 1696
标签:使用 turn 优先级 arc problem 4.0 pre gets 类型
原文地址:http://www.cnblogs.com/IUUUUUUUskyyy/p/6193820.html