链接:https://ac.nowcoder.com/acm/contest/317/A
来源:牛客网
小a的数学基础实在太差了,以至于他只会用计算器算数。他的计算器比较特殊,只有+,−,×,/+,−,×,/(即加减乘除)四种运算。
经过一番周折,小a终于算出了他想要的数,但是他却忘记了最初的数是什么。不过幸运的是他记下了整个操作序列,他想请你帮他算出最初的数
经过一番周折,小a终于算出了他想要的数,但是他却忘记了最初的数是什么。不过幸运的是他记下了整个操作序列,他想请你帮他算出最初的数
输入描述:
第一行两个整数n,Xn,X,分别表示操作次数和最终的数
接下来nn行表示操作序列,每行两个数opt,xopt,x
若opt=1opt=1,则表示将当前数加xx
若opt=2opt=2,则表示将当前数减xx
若opt=3opt=3,则表示将当前数乘xx
若opt=4opt=4,则表示将当前数除以xx
输出描述:
一个整数表示最初的数
备注:
n⩽100,0<X⩽1018n⩽100,0<X⩽1018
数据保证:
1. 最初的数在进行操作时不会超过long long范围
2. 如果你的程序合法,那么运算中所有的数均为整数,所有的除法均为整除!
3. 不会出现整数被0除的情况
#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<map> #include<algorithm> #define ll long long using namespace std; ll a[10000000],b[10000000]; int main() { ll n,m; scanf("%lld %lld",&n,&m); for(int i=0;i<n;i++) { scanf("%lld%lld",&a[i],&b[i]); } for(int i=n-1;i>=0;i--) { switch(a[i]) { case 1: m=m-b[i]; break; case 2: m=m+b[i]; break; case 3: m=m/b[i]; break; case 4: m=m*b[i]; break; } } printf("%lld ",m); return 0; }