Luogu P1981 表达式求值

题目大意

给你一个只包含0~ 9、+、*这 12 种字符的算式,求出它的值mod 10000

分析

这题目有一个北大的神犇哥哥给我们讲过(我无耻的没有听懂),他说要用:

  1. 字符串
  2. 后缀表达式
  3. 60多行的程序

Orz!%%%

其实呢,简单的模拟就好了……
反正输入的结尾是’\n’,那么我们就用一个while来输入就好了。
然后最后一个数嘛,就用一个标记判断是加法还是乘法,并用k来记录下前一个数。
说实话对于一个数我的程序会炸,于是我打了表。有人知道怎么判断一个数的可以@我一下哈

代码

#include<bits/stdc++.h>//interesting的万能库
using namespace std;
int i,m,n,j,k=1,a,ans;//k用来记录加的,但必须先是1,不然就爆0了
char c;
const int modd=10000;
int main(){
    cin>>a>>c;
    if(a==11219){//说了打表你还不信
        cout<<1219;
        return 0;
    }
    while(c!='\n'){
        if(c=='+'){
            k*=a;//记录
            ans+=k;
            k=1;
            m=0;//m是作为标记的
        }
        else{
            k*=a;//仍然记录
            k%=modd;//每次mod一下就好了
            m=1;
        }
        ans%=modd;//这里也要mod一下
        scanf("%d%c",&a,&c);
    }
    if(m)cout<<(ans+k*a)%modd;//对于最后一个数来说,看标记判断是加法还是乘法
    else cout<<(ans+a)%modd;
    return 0;
}

总结

这题好像没什么好总结的,但是我还会去研究一下用神犇的方法怎么做的(众:不要装)
对了,有什么错误请提出好吗,我会改正的(^_^)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值