what I see in ISCAS

第一个题目,很简单,但是我就是没想明白,后来被点了一下,就是stack每次存储的都是最后一次的(5 4)括号中的第一个数字,用于记录个数,还需要定义一个Now变量,每次遇到(就乘以后边的数,并将这个数据进栈,遇到)就除以之前进栈的数据。
代码如下:
#include<iostream>
#include<cstdio>
#include<stack>
#include<map>
using namespace std ;


stack<int> Rem ;
map<int , int >res ;
int main(){
    string s ;
    while(getline(cin,s))
    {
        int Now = 1 ;
        res .clear();
        bool flag =false ;
        while(!Rem.empty())
        {
            Rem.pop();
        }
        for(int i = 0 ; i < s.size(); i ++)
        {
            if(s[i]>='0'&&s[i]<='9')
            {
                int Num = 0 ;
                while(s[i]>='0'&&s[i]<='9')
                {
                    Num= Num*10+s[i++]-'0';
                }
                i -- ;
                if(flag)
                {
                   Rem.push(Num);
                   Now = Num*Now;
                   flag = false ;
                }
                else {
                   res[Num] +=Now;
                }
            }else if(s[i]=='(')
            {

                flag = true ;
            }else if(s[i]==')')
            {
                int tp = Rem.top();
                Rem.pop();
                Now = Now/tp ;
            }
        }
        for(int i = 1000 ; i >=0 ; i --)
        {
            if(res[i]>0)
                printf("(%d,%d)\n",res[i],i);
        }
    }

}

猜你喜欢

转载自blog.csdn.net/qq_36616268/article/details/81014815
今日推荐