zoukankan      html  css  js  c++  java
  • 表达式计算(模拟)

    http://acm.hdu.edu.cn/showproblem.php?pid=3347

    C++ Map秒杀

    附上代码

    #include<stdio.h>
    #include<map>
    #include<string.h>
    #include<string>
    #include<iostream>
    #include<ctype.h>
    using namespace std;
    map<string,int>mp;
    map<string,int>::iterator it;
    int main()
    {
        //freopen("in.txt","r",stdin);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            mp.clear();
            int sum=0;
            int n;
            scanf("%d",&n);
            char s[22];
            int val;
            //string ss;
             for(int i=0;i<n-1;i++)
            {
                scanf("%s = %d",s,&val);
                //ss=s;
                mp[s]=val;
            }
            char str[22];
            int flag=1;
            while(scanf("%s ",str),str[0]!='?')
            {
                if(str[0]=='+')
                    flag=1;
                else if(str[0]=='-'&&!isdigit(str[1]))
                    flag=-1;
                else if(str[0]=='=')
                    continue;
                //printf("flag=%d ",flag);
                if(isalpha(str[0]))
                {
                    it=mp.find(str);
                    if(it!=mp.end())
                        {
                            if(flag==1)
                                sum+=it->second;
                            else if(flag==-1)
                                sum-=it->second;
                            else
                                sum=sum;
                        }
                   // printf("sum=%d ",sum);
                }
                else if(isdigit(str[0]))
                {
                    int len=strlen(str);
                    int num=0,temp=1;
                    for(int i=len-1;i>=0;i--)
                    {
                        num+=temp*(str[i]-'0');
                        temp*=10;
                    }
                    if(flag==1)
                        sum+=num;
                    else if(flag==-1)
                        sum-=num;
                    else
                        sum=sum;
                     // printf("sum=%d ",sum);
                }
                else if(str[0]=='-'&&isdigit(str[1]))
                {
                    int len=strlen(str);
                    int num=0,temp=1;
                    for(int i=len-1;i>=1;i--)
                    {
                        num+=temp*(str[i]-'0');
                        temp*=10;
                    }
                    num=-num;
                    if(flag==1)
                        sum+=num;
                    else if(flag==-1)
                        sum-=num;
                    else
                        sum=sum;
                         //printf("sum=%d ",sum);
                }
            }
            printf("%d
    ",sum);
    
        }
        return 0;
    }
    View Code
  • 相关阅读:
    软件工程作业-结对实验
    软件工程实践作业2
    UNIX线程之间的关系
    c中计时的几种方法
    调试器工作原理(3):调试信息
    调试器工作原理(2):实现断点
    调试器工作原理(1):基础篇
    linux的终端,网络虚拟终端,伪终端(转)
    asterisk webrtc使用SIPML5初体验
    初次使用nodejs的问题
  • 原文地址:https://www.cnblogs.com/lyf123456/p/3426065.html
Copyright © 2011-2022 走看看