MENU

小a的计算器 | ACM

May 2, 2019 • 我爱学习

题目大意小a的数学基础实在太差了,以至于他只会用计算器算数。
他的计算器比较特殊,只有+,−,×,/(即加减乘除)四种运算。
经过一番周折,小a终于算出了他想要的数,但是他却忘记了最初的数是什么。
不过幸运的是他记下了整个操作序列,他想请你帮他算出最初的数
输入数据第一行两个整数n,X,分别表示操作次数和最终的数
接下来n行表示操作序列,每行两个数opt,x
若opt=1,则表示将当前数加x
若opt=2,则表示将当前数减x
若opt=3,则表示将当前数乘x
若opt=4,则表示将当前数除以x
数据输出一个整数表示最初的数
样例输入4 6
1 3
2 1
3 3
4 2
样例输出2
解释2+3=5
5-1=4
4*3=12
12/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;
}
Last Modified: September 8, 2021