洛谷 P1981 表达式求值 2013NOIP普及组第二题

题目描述

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

输入格式:

一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“ +++ ”和乘法运算符“ × \times × ”,且没有括号,所有参与运算的数字均为 000 到 231−12^{31}-1231−1 之间的整数。

输入数据保证这一行只有 0−9 0-90−9 、 +++ 、 × \times × 这 1212 12 种字符。

输出格式:

 

一个整数,表示这个表达式的值。

注意:当答案长度多于 444 位时,请只输出最后 4 44 位,前导 0 00 不输出。

输入样例:

1+1*3+4

输出样例:

8

输入样例:

1+1234567890*1

输出样例:

7891

输入样例:

1+1000000003*1

输出样例:

4

说明

对于 30%30\%30% 的数据, 0≤0≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤100≤100≤100 ;

对于 80%80\%80% 的数据, 0≤0≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤1000≤1000≤1000 ;

对于 100%100\%100% 的数据, 0≤0≤0≤ 表达式中加法运算符和乘法运算符的总数 ≤100000≤100000≤100000 。

思路:

一边输入一边进行操作,可以用python2直接无脑 AC 可惜 NOIP没有python啊哈哈哈。

具体看代码:

// luogu-judger-enable-o2
#include
#include
#include
#include
using namespace std;
int main()
{
    long long shu,sum=0,cj;//shu表示当前输入的数,cj为当前阶段的和
    char ch=0,newch;//ch为上一个运算符 newch为当前输入的运算符
    bool flag=1;
    while(flag)
    {
        scanf("%lld",&shu);
        flag=scanf("%c",&newch)==1?true:false;//当输入结束时,while结束
        if(ch==0) cj=shu;//如果刚开始输入,将阶段和置为当前数
        if(ch=='+') sum=(sum+cj)%10000,cj=shu;//如果是+号,进行加法操作
        if(ch=='*') cj=(cj*shu)%10000;//如果是乘号,进行乘法运算
        if(!flag) sum=(sum+cj)%10000;//最后一次操作
        ch=newch;//每次输入后把旧运算符每次更新
    }
    printf("%lld",sum);//输出
}

 

你可能感兴趣的:(无,模拟......?)