首页 > 其他分享 >PTA L2-033 简单计算器 手写栈

PTA L2-033 简单计算器 手写栈

时间:2024-03-26 20:00:13浏览次数:27  
标签:int PTA num L2 n1 033 n2 id op

cal.jpg

本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:

  1. 从 S1​ 中弹出两个数字,顺序为 n1​ 和 n2​;
  2. 从 S2​ 中弹出一个运算符 op;
  3. 执行计算 n2​ op n1​;
  4. 将得到的结果压回 S1​。

直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。

输入格式:

输入首先在第一行给出正整数 N(1<N≤103),为 S1​ 中数字的个数。

第二行给出 N 个绝对值不超过 100 的整数;第三行给出 N−1 个运算符 —— 这里仅考虑 +-*/ 这四种运算。一行中的数字和符号都以空格分隔。

输出格式:

将输入的数字和运算符按给定顺序分别压入堆栈 S1​ 和 S2​,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 109。

如果执行除法时出现分母为零的非法操作,则在一行中输出:ERROR: X/0,其中 X 是当时的分子。然后结束程序。

输入样例 1:

5
40 5 8 3 2
/ * - +

输出样例 1:

2

输入样例 2:

5
2 5 8 4 4
* / - +

输出样例 2:

ERROR: 5/0

做法:

注:栈是一种先进后出的数据结构。

1.将数值与操作符压入栈中

2.每次取两个数值与一个操作符,进行运算(注意除法)。

3.若出现除零则停止,否则运行到 操作符栈 为空。

4.输出

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 1010;
int num[N],id_n,id_op;
char op[N];

bool get_resuld()
{
    int n1 = num[id_n--],n2 = num[id_n--];
    char op1 = op[id_op--];
    if(op1 == '+') num[++id_n] = n2 + n1;
    else if(op1 == '-') num[++id_n] = n2 - n1;
    else if(op1 == '*') num[++id_n] = n2 * n1;
    else
    {
        if(n1 == 0) return false;
        else num[++id_n] = n2 / n1;
    }
    return true;
}
    
int main()
{
    int n = 0;
    scanf("%d",&n);
    for(int i = 0;i < n;i++) scanf("%d",&num[i]);
    for(int i = 0;i < n - 1;i++)
    {
        char t[2];
        scanf("%s",t);
        op[i] = *t;
    }
    id_n = n - 1;
    id_op = n - 2;
    int flag = 1;
    while(id_op >= 0)
        if(!get_resuld())
        {
            flag = 0;
            break;
        }
    if(flag) printf("%d\n",num[0]);
    else printf("ERROR: %d/0\n",num[id_n + 1]);
    return 0;
}

结果:

标签:int,PTA,num,L2,n1,033,n2,id,op
From: https://blog.csdn.net/m0_75081848/article/details/137055030

相关文章

  • V4L2 ioctl调用流程分析
    学习资料:韦东山第三期 可参考:https://www.cnblogs.com/lethe1203/p/18097351video_device->.fops->v4l2_file_operations->.ioctl_ops->v4l2_ioctl_opsv4l2_ioctl_ops可分为两类:INFO_FL_STD:标准的,无需特殊的代码来处理,APP的调用可以直达这些处理函数I......
  • V4L2驱动程序整体框架
    学习资料:韦东山第三期 应用程序调用open/read/write会调用到v4l2_fops的相应函数:接口层再调用到硬件相关的代码,根据打开的文件得到一个video_device(根据此设备号),调用这个video_device里面的vdev->fops->open函数可以看到read和ioctl也是类似的: 应用程序进入到驱动之......
  • V4L2应用程序开发(2)
    参考资料:韦东山第三期  V4L2获取数据的操作流程如下:打开设备ioctlVIDIOC_QUERYCAP:QueryCapbility,查询能力枚举格式、设置格式ioctlVIDIOC_REQBUFS:申请bufferioctlVIDIOC_QUERYBUF和mmap:查询buffer信息、映射ioctlVIDIOC_QBUF:把buffer放入"空闲链表"ioctlVIDIO......
  • Linux V4l2简单使用
    V4L2:VideoforLinuxtwo,缩写Video4Linux2,是Linux内核中的一个框架,提供了一套用于视频设备驱动程序开发的API。它是一个开放的、通用的、模块化的视频设备驱动程序框架,允许Linux操作系统和应用程序与各种视频设备(如摄像头、视频采集卡等)进行交互。V4L2提供了通用的API,使......
  • V4L2应用程序开发(1)
    参考资料:韦东山第三期 v4l2应用程序开发分为两个部分,数据采集流程和控制流程两个部分 数据采集流程:分为空闲链表和完成链表 驱动程序周而复始地做如下事情:从硬件采集到数据把"空闲链表"取出buffer,把数据存入buffer把含有数据的buffer放入"完成链表"APP也会周而......
  • PTA基础编程题目集 6-10 阶乘计算升级版
    阶乘计算升级版本题要求实现一个打印非负整数阶乘的函数。函数接口定义:voidPrint_Factorial(constintN);其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalidinput”。裁判测试程序样例:#include<stdio.h>......
  • wsl2 ubuntu子系统安装显卡驱动与cuda
    wsl2安装参考文档:http://t.csdnimg.cn/ClwJ9演示安装ubuntu22列出可安装的子系统命令:wsl--list--onlinePSC:\Users\linyu>wsl--list--online以下是可安装的有效分发的列表。使用'wsl.exe--install<Distro>'安装。NAMEF......
  • PTA最短距离的两点
    给出一些整数对,它们表示平面上的点,求所有这些点中距离最近的两个点。输入格式:测试数据有多组。对于每组测试,先输入一个整数N,表示点的个数,再输入N个点(以两个整数表示横纵坐标)。若N为0,则表示输入结束。输出格式:对于每组测试,输入所有点中距离最短的两点,格式为“(a,b)(......
  • pta L1-076 降价提醒机器人
    L1-076降价提醒机器人分数10全屏浏览切换布局作者 DAI,Longao单位 杭州百腾教育科技有限公司小T想买一个玩具很久了,但价格有些高,他打算等便宜些再买。但天天盯着购物网站很麻烦,请你帮小T写一个降价提醒机器人,当玩具的当前价格比他设定的价格便宜时发出提醒。......
  • 2024年天梯成信小赛--L2-3,L2-4补题
    L2-3:Gwen的小剪刀题意:思路:二分美感度+克鲁斯卡尔intn,m,sum0;typedefstructmyp{intu,v;intb,h;};boolcmp(mypa,mypb){returna.h<b.h;}myparr[200005];intfa[100005];intfind(intx){// if(x==fa[x])returnx;// returnfa[x]=find(fa[x......