【刷题】表达式求值

Description

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

Input

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“ +” 和乘法运算符“ *”,且没有括号, 所有参与运算的数字均为 0 到 231-1 之间的整数。 输入数据保证这一行只有 0~ 9、 +、 *这 12 种字符。

Output

输出只有一行,包含一个整数, 表示这个表达式的值。 注意: 当答案长度多于 4 位时,请只输出最后 4 位, 前导 0 不输出。

Sample Input

【输入样例 1】 1+1*3+4 【输入样例 2】 1+1234567890*1 【输入样例 3】 1+1000000003*1 

Sample Output

【输出样例 1】8【输出样例 2】 7891【输出样例 3】4

HINT

【输入输出样例说明】

样例 1 计算的结果为 8, 直接输出 8。

样例 2 计算的结果为 1234567891, 输出后 4 位,即 7891。

样例 3 计算的结果为 1000000004, 输出后 4 位,即 4。

【数据范围】

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

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

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

Code:

#include <iostream>
#include <string>

#define SIZE 100001

using namespace std;

string a;
int num[SIZE];
char op[SIZE];

int main(int argc, char** argv)
{
	long long res = 0, i = 0, temp = 0, n = 0;
	
	cin >> a;
	
	for ( ; ; )
	{
		if ((a[i] == '+') || (a[i] == '*'))
		{
			op[++n] = a[i];
			num[n-1] = temp;
			temp = 0;
		}
		else
		{
			temp = temp * 10 + a[i] - '0';
			temp %= 10000;
		}
		if (++i == a.size())
		{
			break;
		}
	}
	num[n] = temp;
	num[n] = temp;
	temp = num[0];
	for (i = 1; i <= n; i++)
	{
		if (op[i] == '+')
		{
			res += temp;
			res %= 10000;
			temp = num[i];
		}
		else
		{
			temp *= num[i];
			temp %= 10000;
		}
	}
	
	printf("%d", (res % 10000 + temp % 10000) % 10000);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/drtlstf/article/details/80933366
今日推荐