题目链接
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“×”,且没有括号,所有参与运算的数字均为 0 到 2^31-1之间的整数。
输入数据保证这一行只有 0−9、+、×这 12种字符。
输出格式
一个整数,表示这个表达式的值。
注意:当答案长度多于 4 位时,请只输出最后 4 位,前导 0 不输出。
输入输出样例
输入 #1
1+1*3+4
输出 #1
8
输入 #2
1+1234567890*1
输出 #2
7891
输入 #3
1+1000000003*1
输出 #3
4
说明/提示
对于 30%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100;
对于 80%的数据,0≤表达式中加法运算符和乘法运算符的总数≤1000;
对于100%的数据,0≤表达式中加法运算符和乘法运算符的总数≤100000。
又是因为主观意识判断题目难度…orz
之前学栈的时候,有个例题就是这个
感觉写起来太复杂,于是就放弃了这个题(昨天的牛客算法周周练3)
今天补题,看到别人的代码
有被惊艳到,来和你们分享hhh
脑子真的是一个好东西
题解:
主要就是分成一块一块相加,用一个变量记录两个加号之间数的和,遇到下面的加号时,就把这个和加到答案里去。
代码其实清晰易懂
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
int ans=0, a, p;
char ch;
cin >> p;
while (cin >> ch)
{
cin >> a;
if (ch == '+')
{
ans += p;
ans %= 10000;
p = a;
}
else
{
p *= a;
p %= 10000;
}
}
ans += p;
cout << ans%10000 << endl;
}