牛客寒假算法基础集训营1 小a的计算器

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

备注:
n 100 , 0 < X 1 0 18 n⩽100,0<X⩽10 ^{18}

数据保证:

最初的数在进行操作时不会超过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;
}

猜你喜欢

转载自blog.csdn.net/zhaohaibo_/article/details/86654659