結果
問題 | No.1135 RPN |
ユーザー |
|
提出日時 | 2021-05-12 02:17:02 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,798 bytes |
コンパイル時間 | 1,077 ms |
コンパイル使用メモリ | 81,304 KB |
最終ジャッジ日時 | 2025-01-21 10:12:10 |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 3 |
other | WA * 16 |
ソースコード
#include <vector>#include <string>#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;vector<string> split(string &str, const char *delim){vector<string> result;int cutAt;while( (cutAt = str.find_first_of(delim)) != str.npos ){if(cutAt > 0){result.push_back(str.substr(0, cutAt));}str = str.substr(cutAt + 1);}if(str.length() > 0){result.push_back(str);}return result;}void reversepoland(string &exp){vector<string> token = split(exp," ");vector<double> resolveNumber;vector<string> resolveString;for(int i=0;i<token.size();i++){char *p=NULL;double d=strtod(token[i].c_str(),&p);if(p-token[i].c_str()==token[i].size()){resolveNumber.push_back(d);resolveString.push_back(token[i]);}else{//if(resolveNumber.size()<2){printf("stack few\n");return;}double d2=resolveNumber[resolveNumber.size()-1],d1=resolveNumber[resolveNumber.size()-2];resolveNumber.pop_back(),resolveNumber.pop_back();string s2=resolveString[resolveString.size()-1],s1=resolveString[resolveString.size()-2];resolveString.pop_back(),resolveString.pop_back();double ret;if(token[i]=="+"){ret=d1+d2;}else if(token[i]=="-"){ret=d1-d2;}else if(token[i]=="*"){ret=d1*d2;}else if(token[i]=="/"){ret=d1/d2;}//else if(token[i]=="%"){ret=d1%d2;}//else if(token[i]=="**"){ret=pow(d1,d2);}//else{printf("unknown OP %s\n",token[i].c_str());return;}resolveNumber.push_back(ret);resolveString.push_back("("+s1+token[i]+s2+")"); //this won't emit "optimized" expression. full of parens.}}//if(resolveNumber.size()!=1){printf("result stack not 1");return;}printf("%.0f\n",resolveNumber[0]);//puts(resolveString[0].c_str());}int main(){string str;getline(cin,str);reversepoland(str);}