题目大意 | 小a的数学基础实在太差了,以至于他只会用计算器算数。他的计算器比较特殊,只有+,−,×,/(即加减乘除)四种运算。经过一番周折,小a终于算出了他想要的数,但是他却忘记了最初的数是什么。不过幸运的是他记下了整个操作序列,他想请你帮他算出最初的数 |
---|
输入数据 | 第一行两个整数n,X,分别表示操作次数和最终的数接下来n行表示操作序列,每行两个数opt,x若opt=1,则表示将当前数加x若opt=2,则表示将当前数减x若opt=3,则表示将当前数乘x若opt=4,则表示将当前数除以x |
数据输出 | 一个整数表示最初的数 |
样例输入 | 4 61 32 13 34 2 |
样例输出 | 2 |
解释 | 2+3=55-1=44*3=1212/3=6 |
思路简述
- 用两个数组(或者栈)储存操作符和操作数,逆运算即可
#include<stdio.h>
#include<string.h>
int main()
{
int X[105];
int O[105];
long long x,n;
while(~scanf("%lld %lld",&n,&x))
{
memset(X,0,sizeof(X));
while(n--)
{
scanf("%d %d",&O[n],&X[n]);
}
n++;
while(X[n] != 0)
{
switch(O[n])
{
case 1:
x -= X[n];
break;
case 2:
x += X[n];
break;
case 3:
x/=X[n];
break;
case 4:
x*=X[n];
break;
}
n++;
}
printf("%lld\n",x);
}
return 0;
}