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 计算器的改良的主要内容,如果未能解决你的问题,请参考以下文章

[luoguP1022] 计算器的改良(模拟)

LGOJ P1022 计算器的改良

[NOIP2000] 计算器的改良

洛谷—— P1022 计算器的改良

洛谷P1022 计算器的改良

洛谷 P1022 计算器的改良