zoukankan      html  css  js  c++  java
  • 2178 表达式运算Cuties

    2178 表达式运算Cuties

     

     时间限制: 1 s
     空间限制: 32000 KB
     题目等级 : 大师 Master
     
     
     
    题目描述 Description

    给出一个表达式,其中运算符仅包含+,-,*,/,^要求求出表达式的最终值

    数据可能会出现括号情况 还有可能出现多余括号情况

    数据保证不会出现>maxlongint的数据

    数据可能回出现负数情况

    输入描述 Input Description

    仅一行,即为表达式

    输出描述 Output Description

    仅一行,既为表达式算出的结果

    样例输入 Sample Input

    (2+2)^(1+1)

    样例输出 Sample Output

    16

    数据范围及提示 Data Size & Hint

    表达式总长度<=30

    分类标签 Tags 点此展开 

     
    题解:
    字符串表达式运算的模板
    AC代码:
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=52;
    char s[N],sym[N];
    int i,p,l,cnt,num[N];
    bool can(){
        if(sym[p]=='^') return 1;
        if((s[i]=='+'||s[i]=='-')&&sym[p]!='(') return 1;
        if((s[i]=='*'||s[i]=='/')&&(sym[p]=='*'||sym[p]=='/')) return 1;
        return 0;
    }
    int fpow(int a,int b){
        int res=1;
        for(;b;b>>=1,a=a*a) if(b&1) res=res*a;
        return res;
    }
    void push(){
        sym[++p]=s[i];
    }
    void pop(){
        switch(sym[p--]){
            case '+':num[p]+=num[p+1];break;
            case '-':num[p]-=num[p+1];break;
            case '*':num[p]*=num[p+1];break;
            case '/':num[p]/=num[p+1];break;
            case '^':num[p]=fpow(num[p],num[p+1]);break;
        }
    }
    int main(){
        scanf("%s",s+1);
        l=strlen(s+1);
        for(i=1;i<=l;i++){
            if(s[i]=='(') cnt++;
            if(s[i]==')') cnt--;
        }
        sym[++p]='(';
        for(;cnt>=0;cnt--) s[++l]=')';
        for(i=1;i<=l;){
            while(s[i]=='('){push();i++;}
            int x=0;
            while(s[i]>='0'&&s[i]<='9') x=x*10+s[i++]-'0';
            num[p]=x;
            do{
                if(s[i]==')'){
                    while(sym[p]!='(') pop();
                    p--;
                    num[p]=num[p+1];
                }
                else{
                    while(can()) pop();
                    push();
                }
                i++;
            }while(i<=l&&s[i-1]==')');
        }
        printf("%d",num[0]);
        return 0;
    }
     
  • 相关阅读:
    电商总结(六)系统容量预估
    Nginx 和 IIS 实现动静分离
    聊一聊PV和并发
    RabbitMQ学习系列(四): 几种Exchange 模式
    RabbitMQ学习系列(三): C# 如何使用 RabbitMQ
    RabbitMQ学习系列(二): RabbitMQ安装与配置
    RabbitMQ学习系列(一): 介绍
    推荐:《部落 一呼百应的力量》
    Solr学习总结(八)IK 中文分词的配置和使用
    常用的数据统计Sql 总结
  • 原文地址:https://www.cnblogs.com/shenben/p/6066337.html
Copyright © 2011-2022 走看看