• 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数据结构类型

  • 相关阅读:
    Android EditText 文本框实现搜索和清空效果
    Android学习笔记之打钩显示输入的密码
    Mysql limit offset
    Android SDK更新以及ADT更新出现问题的解决办法
    Android Broadcast Receiver 使用入门
    立即执行函数
    JS 原型 & 继承
    JS 对象
    chrome extension overview
    JS 修改元素
  • 原文地址:https://www.cnblogs.com/hxh88/p/9249566.html
Copyright © 2020-2023  润新知