codevs 计算器的改良
Posted hxh88
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs 计算器的改良相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<cctype> #include<vector> #include<cstdio> using namespace std; // int get_num(string s) { int sum=0; for(int i=0;i<s.length();i++) { int k=s[i]-‘0‘; sum=sum*10+k; } //cout<<sum<<endl; return sum; } int main() { string s="6a-5+1=2-2a"; cin>>s; vector<string> s0; //第一步,实现分离 char ch; int loc=0; for(int i=1;i<s.length();i++) { if(s[i]==‘=‘) { s0.push_back(s.substr(loc,i-loc)); s0.push_back("="); loc=i+1; } else if(s[i]==‘+‘||s[i]==‘-‘) { string tmp=s.substr(loc,i-loc); s0.push_back(tmp); loc=i; } } s0.push_back(s.substr(loc,s.length()-loc)); //for(int i=0;i<s0.size();i++) // cout<<s0[i]<<endl; //分离后的计算 int x=0,c=0; int f=1; for(int i=0;i<s0.size();i++){ if(s0[i]=="=") { f=-1; continue; } int kt=s0[i].length(); if(isalpha(s0[i][kt-1])){ ch=s0[i][kt-1]; if(s0[i][0]==‘-‘) x-=f*get_num(s0[i].substr(1,kt-2)); else if(s0[i][0]==‘+‘) x+=f*get_num(s0[i].substr(1,kt-2)); else x+=f*get_num(s0[i].substr(0,kt-1)); } else { if(s0[i][0]==‘-‘) c+=f*get_num(s0[i].substr(1,kt)); else if(s0[i][0]==‘+‘) c-=f*get_num(s0[i].substr(1,kt)); else c-=f*get_num(s0[i].substr(0,kt)); } } //cout<<x<<endl; //cout<<c<<endl; printf("%c=%.3f",ch,c*1.0/x); return 0; }
一道很简单的题目,但是花了超级多的时间。
http://codevs.cn/problem/1015/
情况很多要依次处理,我是先把他们拆开打散,然后做相应的处理。
主要用到了C++ STL 中的string数据结构类型
以上是关于codevs 计算器的改良的主要内容,如果未能解决你的问题,请参考以下文章