【NOIP普及组】表达式求值

news2024/11/28 12:34:56

【NOIP普及组】表达式求值

      • C语言代码
      • C++ 代码
      • Java代码
      • Python代码


💐The Begin💐点点关注,收藏不迷路💐

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

输入

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0到2^31-1之间的整数。输入数据保证这一行只有0~9、+、*这12种字符。

输出

输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4位时,请只输出最后4位,前导0不输出。

样例输入

1+1*3+4

样例输出

8

C语言代码

#include <stdio.h>

int main() {
    int num;  // 用于存储当前读入的数字
    int prev_num;  // 用于存储前一个数字
    char op;  // 用于存储运算符
    int result = 0;  // 用于存储最终的计算结果

    scanf("%d", &prev_num);  // 读取输入的第一个数字
    prev_num %= 10000;  // 对第一个数字取后四位,满足题目要求

    while (scanf(" %c%d", &op, &num) == 2) {  // 循环读取运算符和数字,成功读取两个值时继续循环,注意%c前加空格跳过空白字符
        num %= 10000;  // 对当前读入的数字取后四位

        if (op == '*') {  // 如果运算符是乘号
            prev_num *= num;  // 前一个数字与当前数字相乘
            prev_num %= 10000;  // 相乘结果取后四位
        } else {  // 如果运算符是加号
            result += prev_num;  // 将前一个数字累加到结果中
            result %= 10000;  // 累加结果取后四位
            prev_num = num;  // 更新前一个数字为当前数字,准备处理下一组运算
        }
    }

    result += prev_num;  // 循环结束后,将最后剩下的数字累加到结果中
    result %= 10000;  // 最终结果取后四位

    printf("%d\n", result);  // 输出最终结果

    return 0;
}

C++ 代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    int num;  // 当前读入的数字
    int prev_num;  // 前一个数字
    char op;  // 运算符
    int result = 0;  // 最终计算结果

    cin >> prev_num;  // 从标准输入读取第一个数字
    prev_num %= 10000;  // 对第一个数字取模,保留后四位

    while (cin >> op >> num) {  // 持续从标准输入读取运算符和数字,只要能成功读取就循环
        num %= 10000;  // 对当前读入数字取模,保留后四位

        if (op == '*') {  // 若读取的运算符为乘号
            prev_num *= num;  // 用前一个数字与当前数字相乘
            prev_num %= 10000;  // 相乘后的结果取模,保留后四位
        } else {  // 若读取的运算符为加号
            result += prev_num;  // 将前一个数字累加到最终结果中
            result %= 10000;  // 累加后的结果取模,保留后四位
            prev_num = num;  // 更新前一个数字为当前数字,为下一轮运算做准备
        }
    }

    result += prev_num;  // 循环结束后,把最后剩下的数字加到最终结果中
    result %= 10000;  // 对最终结果取模,保留后四位

    cout << result << endl;  // 输出最终结果

    return 0;
}

Java代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num;  // 当前读入的数字
        int prev_num = scanner.nextInt();  // 先读入第一个数字作为前一个数字
        prev_num %= 10000;  // 对第一个数字取模,保留后四位

        char op;  // 运算符
        int result = 0;  // 最终计算结果

        while (scanner.hasNext()) {  // 只要输入流还有数据就继续循环
            op = scanner.next().charAt(0);  // 读取一个字符作为运算符
            num = scanner.nextInt();  // 读取下一个数字
            num %= 10000;  // 对读入的数字取模,保留后四位

            if (op == '*') {  // 如果运算符是乘号
                prev_num *= num;  // 前一个数字与当前数字相乘
                prev_num %= 10000;  // 相乘结果取模,保留后四位
            } else {  // 如果运算符是加号
                result += prev_num;  // 将前一个数字累加到最终结果中
                result %= 10000;  // 累加结果取模,保留后四位
                prev_num = num;  // 更新前一个数字为当前数字,准备下一轮运算
            }
        }

        result += prev_num;  // 循环结束后,把最后剩下的数字加到最终结果中
        result %= 10000;  // 对最终结果取模,保留后四位

        System.out.println(result);  // 输出最终结果

        scanner.close();  // 关闭Scanner对象,释放资源
    }
}

Python代码

# 获取第一个数字,并对其取模(保留后四位),赋值给prev_num
prev_num = int(input()) % 10000  
result = 0  # 初始化最终结果为0

while True:  # 无限循环,通过内部条件判断来决定何时退出
    try:
        token = input().split()  # 读取输入并按空格分割成列表
        op = token[0]  # 取第一个元素作为运算符
        num = int(token[1]) % 10000  # 取第二个元素转换为整数并取模(保留后四位)

        if op == '*':  # 如果运算符是乘号
            prev_num *= num  # 前一个数字与当前数字相乘
            prev_num %= 10000  # 相乘结果取模(保留后四位)
        else:  # 如果运算符是加号
            result += prev_num  # 将前一个数字累加到最终结果中
            result %= 10000  # 累加结果取模(保留后四位)
            prev_num = num  # 更新前一个数字为当前数字
    except:  # 当出现异常(比如输入结束等情况),跳出循环
        break

result += prev_num  # 循环结束后,把最后剩下的数字加到最终结果中
result %= 10000  # 对最终结果取模(保留后四位)

print(result)  # 输出最终结果

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“蜀道山”高校联合公益赛 Web (部分)

文章目录 奶龙牌WAF海关警察训练平台恶意代码检测器 奶龙牌WAF <?php if ($_SERVER[REQUEST_METHOD] POST && isset($_FILES[upload_file])) {$file $_FILES[upload_file];if ($file[error] UPLOAD_ERR_OK) {$name isset($_GET[name]) ? $_GET[name] : basen…

鸿蒙中的Image组件如何引用网络图片

1.引用网络图片资源 引入网络图片需要申请权限ohos.permission.INTERNET&#xff0c;此时&#xff0c;Image组件的src参数为网络图片的链接&#xff0c;为了成功加载网络图片&#xff0c;您需要在module.json5文件中申请网络访问权限 注意&#xff1a;实际可用的时候&#xff0…

问题记录-Java后端

问题记录 目录 问题记录1.多数据源使用事务注意事项&#xff1f;2.mybatis执行MySQL的存储过程&#xff1f;3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项&#xff1f; 问题&#xff1a;在springBoot项目中多表处理数…

PySide6 QSS(Qt Style Sheets) Reference: PySide6 QSS参考指南

Qt官网参考资料&#xff1a; QSS介绍&#xff1a; Styling the Widgets Application - Qt for Pythonhttps://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgetstyling.html#tutorial-widgetstyling QSS 参考手册&#xff1a; Qt Style Sheets Reference | Qt Widge…

vue3 开发利器——unplugin-auto-import

这玩意儿是干啥的&#xff1f; 还记得 Vue 3 的组合式 API 语法吗&#xff1f;如果有印象&#xff0c;那你肯定对以下代码有着刻入 DNA 般的熟悉&#xff1a; 刚开始写觉得没什么&#xff0c;但是后来渐渐发现&#xff0c;这玩意儿几乎每个页面都有啊&#xff01; 每次都要写…

搭建AI知识库:打造坚实的团队知识堡垒

在信息爆炸的时代&#xff0c;企业面临着知识管理的挑战。团队知识堡垒的构建&#xff0c;即搭建一个高效的AI知识库&#xff0c;对于保护和利用知识资产、提升团队协作效率和创新能力至关重要。本文将探讨搭建AI知识库的重要性、策略以及如何通过这一系统打造坚实的团队知识堡…

前端-Git

一.基本概念 Git版本控制系统时一个分布式系统&#xff0c;是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景&#xff1a;多人开发管理代码&#xff1b;异地开发&#xff0c;版本管理&#xff0c;版本回滚。 Git 的三个区域&a…

《Shader入门精要》透明效果

代码以及实例图可以看github &#xff1a;zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha Channel&#xff09;​。当开启透明混合后&#xff0c;当一个物体被渲染到屏幕上时&…

Exploring Prompt Engineering: A Systematic Review with SWOT Analysis

文章目录 题目摘要简介方法论背景相关工作评估结论 题目 探索快速工程&#xff1a;基于 SWOT 分析的系统评价 论文地址&#xff1a; https://arxiv.org/abs/2410.12843 摘要 在本文中&#xff0c;我们对大型语言模型 (LLM) 领域的提示工程技术进行了全面的 SWOT 分析。我们强…

LLM-pruner源码解析

1.超参数 模型剪枝的超参数 模型 模型检查点和日志的保存地址 剪枝比例&#xff0c;这里默认0.5 剪枝类型&#xff0c;这里模型L2 模型生成时的超参数 温度 top_p 最大序列长度 逐通道&#xff0c;逐块&#xff0c;逐层&#xff0c;这个逐层我不记得在论文里面提过啊 layer…

Stable Diffusion 3详解

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

零基础学安全--shell(8)脚本相互利用

目录 学习连接 脚本相互利用 脚本利用 利用脚本中的变量 重定向 输出重定向 错误输出 输入重定向 学习连接 声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探…

图书系统小案例

目前就实现了分页查询&#xff0c;修改&#xff0c;删除功能 这个小案例练习到了很多技能&#xff0c;比如前后端交互、异步请求、三层架构思想、后端连接数据库、配置文件、基础业务crud等等 感兴趣的小伙伴可以去做一个试试 准备工作 1、使用maven构建一个web工程 打开i…

深度理解进程的概念(Linux)

目录 一、冯诺依曼体系 二、操作系统(OS) 设计操作系统的目的 核心功能 系统调用 三、进程的概念与基本操作 简介 查看进程 通过系统调用获取进程标识符 通过系统调用创建进程——fork() 四、进程的状态 操作系统中的运行、阻塞和挂起 理解linux内核链表 Linux的进…

自媒体图文视频自动生成软件|03| 页面和结构介绍

代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; 视频图片生成器 一个基于 Python 和 Web 的工具&#xff0c;用于生成带有文字和语音的视频以及图片。支持多种尺寸、…

STM32的一些知识技巧

STM32的一些知识技巧 STM32命名规则 查看代码编译所占用的flash和SRAM的大小 单位为字节&#xff08;Byte&#xff09; 1、使用keil编译结果进行计算 2、查看.map文件 STM32启动模式 主闪存启动地址为0x08000000 查看程序段/函数执行时间 global.prop文件 保存字体配置&…

我们来学mysql -- EXPLAIN之rows(原理篇)

EXPLAIN之rows 题记rows 题记 书接上文《 EXPLAIN之ref》2024美国大选已定&#xff0c;川普剑登上铁王座&#xff0c;在此过程中出谋划策的幕僚很重要&#xff0c;是他们决定了最终的执行计划在《查询成本之索引选择》中提到&#xff0c;explain的输出&#xff0c;就是优化器&…

【AI系统】昇腾 AI 核心单元

昇腾 AI 核心单元 本文将深入介绍昇腾 AI 处理器的核心单元——AI Core&#xff0c;以及其背后的达芬奇架构。昇腾 AI 处理器是华为针对 AI 领域设计的专用处理器&#xff0c;其核心 AI Core 采用了特定域架构&#xff08;Domain Specific Architecture&#xff0c;DSA&#x…

Hadoop生态圈框架部署(九)- Hive部署

文章目录 前言一、Hive部署&#xff08;手动部署&#xff09;下载Hive1. 上传安装包2. 解压Hive安装包2.1 解压2.2 重命名2.3 解决guava冲突 3. 配置Hive3.1 配置Hive环境变量3.2 修改 hive-site.xml 配置文件3.3 配置MySQL驱动包3.3.1 下在MySQL驱动包3.3.2 上传MySQL驱动包3.…

RHCE——SELinux

SELinux 什么是SELinux呢&#xff1f;其实它是【Security-Enhanced Linux】的英文缩写&#xff0c;字母上的意思就是安全强化Linux的意思。 SELinux是由美国国家安全局(NSA)开发的&#xff0c;当初开发的原因是很多企业发现&#xff0c;系统出现问题的原因大部分都在于【内部…