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);
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值