题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式:
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“ +++ ”和乘法运算符“ × \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<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
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);//输出
}