版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaohaibo_/article/details/86654659
小a的计算器
题目描述 :
小a的数学基础实在太差了,以至于他只会用计算器算数。他的计算器比较特殊,只有
,+ ,-, *,/ (即加减乘除)四种运算。
经过一番周折,小a终于算出了他想要的数,但是他却忘记了最初的数是什么。不过幸运的是他记下了整个操作序列,他想请你帮他算出最初的数
输入描述:
第一行两个整数n, X,分别表示操作次数和最终的数接下来n行表示操作序列,每行两个数opt, x
若opt= 1则表示将当前数加x
若opt= 2,则表示将当前数减x
若opt= 3,则表示将当前数乘x
若opt=4,则表示将当前数除以x
输出描述:
一个整数表示最初的数
示例1
输入
4 6
1 3
2 1
3 3
4 2
输出
2
示例2
输入
3 292
3 2
4 3
4 3
输出
1314
备注:
数据保证:
最初的数在进行操作时不会超过long long范围
如果你的程序合法,那么运算中所有的数均为整数,所有的除法均为整除!
不会出现整数被0除的情况
从后向前算就行了,好像也没必要开个栈
数很大,用long long 存
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 100;
pair<int, ll> opts[N];
int main() {
int n;
ll X;
cin >> n >> X;
for (int i = 0; i < n; i ++ ) cin >> opts[i].first >> opts[i].second;
for (int i = n - 1; i >= 0; i -- ) {
int opt = opts[i].first;
int x = opts[i].second;
if (opt == 1) X -= x;
else if (opt == 2) X += x;
else if (opt == 3) X /= x;
else X *= x;
}
cout << X << endl;
return 0;
}