2021年全国高校计算机能力挑战赛C++初赛程序设计题1:表达式求值 老式的计算机只能按照固定次序进行运算,华安大学就有这样一台老式计算机,计算模式为A @ B #C,@和#为输入的运算符(可能是+、

表达式求值老式的计算机只能按照固定次序进行运算,华安大学就有这样一台老式计算机,计算模式为A @ B #C,@和#为输入的运算符(可能是+、*、%,须考虑计算优先级),现给出A,B,C的数值以及@和#对应的运算符,请你编写程序,验证老式计算机的运行结果。

首先声明一下,我也是个菜鸟,如果大家有更好的方法和纠错请指正。

题目

表达式求值
老式的计算机只能按照固定次序进行运算,华安大学就有这样一台老式计算机,计算模式为A @ B #C,@和#为输入的运算符(可能是+、*、%,须考虑计算优先级),现给出A,B,C的数值以及@和#对应的运算符,请你编写程序,验证老式计算机的运行结果。

输入说明:
第一行是一个整数N(|N|≤10000),表示有N组计算数据需要处理,接下来N行,每行是相应的数据,包括三个整数和两个运算符,分别对应A、@、B、#和C。

输出说明:
对每行输入的数据,输出计算结果。

输入样例:
3
1+2*3
3%2+1
5+7%9
输出样例:
7
2
12

代码

#include<iostream>
#include<string>
using namespace std;
double demo1(int a,string x,int b,string y,int c)
{
	if (x == "+") {
		if (y == "+") {
			return a + b + c;
		}
		else if (y == "-") {
			return a + b - c;
		}
		else if (y == "*") {
			return a + (b * c);
		}
		else if (y == "/") {
			return a + (b / c);
		}
		else if (y == "%") {
			return a + (b % c);
		}
	}
	else if (x == "-") {
		if (y == "+") {
			return a - b + c;
		}
		else if (y == "-") {
			return a - b - c;
		}
		else if (y == "*") {
			return a - (b * c);
		}
		else if (y == "/") {
			return a - (b / c);
		}
		else if (y == "%") {
			return a - (b % c);
		}
	}
	else if (x == "*") {
		if (y == "+") {
			return a * b + c;
		}
		else if (y == "-") {
			return a * b - c;
		}
		else if (y == "*") {
			return a * (b * c);
		}
		else if (y == "/") {
			return (a * b) / c;
		}
		else if (y == "%") {
			return (a * b) % c;
		}
	}
	else if (x == "/") {
		if (y == "+") {
			return a / b + c;
		}
		else if (y == "-") {
			return a / b - c;
		}
		else if (y == "*") {
			return a / b * c;
		}
		else if (y == "/") {
			return a / b / c;
		}
		else if (y == "%") {
			return a / b % c;
		}
	}
	else if (x == "%") {
		if (y == "+") {
			return a % b + c;
		}
		else if (y == "-") {
			return a % b - c;
		}
		else if (y == "*") {
			return a % b * c;
		}
		else if (y == "/") {
			return a % b / c;
		}
		else if (y == "%") {
			return a % b % c;
		}
	}
}
int main()
{
	int N=0;
	cin >> N;
	double result[100];
	int a, b, c;
	string x, y;
	for (int i = 0; i < N; i++) 
	{
		cin >> a >> x >> b >> y >> c;
		result[i] = demo1(a, x, b, y, c);
	}
	for (int j = 0; j < N; j++) {
		cout << result[j] << endl;
	}
	system("pause");
	return 0;
}

示例

在这里插入图片描述


版权声明:本文为weixin_55987175原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。