【NOIP普及组】表达式求值

server/2024/11/28 11:57:27/

【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  # 初始化最终结果为0while 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:  # 当出现异常(比如输入结束等情况),跳出循环breakresult += prev_num  # 循环结束后,把最后剩下的数字加到最终结果中
result %= 10000  # 对最终结果取模(保留后四位)print(result)  # 输出最终结果

在这里插入图片描述


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

http://www.ppmy.cn/server/145617.html

相关文章

使用 TinyGo 和 Gopherbot 进行硬件hacking

本篇内容是根据2019年4月份#84 Hardware hacking with TinyGo and Gopherbot音频录制内容的整理与翻译 Mat Ryer 与特邀嘉宾 Ron Evans 共同主持了第一期一对一采访式节目。 Mat 请 Ron 教我们有关 IoT 中的 Go、Gophercon、 TinyGo和Gopherbot的硬件黑客技术。 过程中为符合…

心情追忆:构建支付模块的五个基本接口设计

之前&#xff0c;我独自一人开发了一个名为“心情追忆”的小程序&#xff0c;旨在帮助用户记录日常的心情变化及重要时刻。我从项目的构思、设计、前端&#xff08;小程序&#xff09;开发、后端搭建到最终部署。经过一个月的努力&#xff0c;通过群聊分享等方式&#xff0c;用…

《并查集算法详解及实用模板》

《重生我要成为并查集高手&#x1f354;&#x1f354;&#x1f354;》 并查集&#xff1a;快速查询和快速合并&#xff0c; 路径压缩&#xff0c; 按大小&#xff0c;高度&#xff0c;秩合并。 静态数组实现 &#x1f607;前言 在数据的海洋中&#xff0c;有一种悄然流淌的力量…

Python 将彩色视频转换为黑白视频(MP4-格式可选)

以下是使用 Python 将彩色视频转换为黑白电视风格的示例代码&#xff0c;主要借助了opencv-python库来实现&#xff1a; python import cv2def convert_to_black_and_white_video(input_video_path, output_video_path):# 打开视频文件cap cv2.VideoCapture(input_video_pat…

机器学习模型——线性回归

文章目录 前言1.基础概念2.代价函数3.单变量线性回归3.1加载数据3.2初始化超参数3.3梯度下降算法3.3.1初次梯度下降3.3.2 多次梯度下降3.3.3结果可视化 前言 随着互联网数据不断累积&#xff0c;硬件不断升级迭代&#xff0c;在这个信息爆炸的时代&#xff0c;机器学习已被应用…

嵌入式linux C++通用makefile模板

编译生成spdlog_app可执行程序 #Makefile # 编译器 #COMPLITEarm-none-linux-gnueabi- #COMPLITE/root/share/nuvoton_cross/arm_linux_4.8/bin/arm-nuvoton-linux-uclibceabi- #/root/share/nuvoton_cross/host/usr/bin/ COMPLITEarm-nuvoton-linux-gnueabi- CC$(COMPLITE)gc…

redis中的bigkey及读取优化

一、bigKey介绍 1、简介 在 Redis 中,Big Key(大键)指的是占用大量内存的单个键。通常,Redis 是一个高性能的内存数据库,但是当某些键变得非常大时,会带来性能上的影响。例如,大量的内存消耗、长时间的操作延迟,甚至可能导致 Redis 停止响应或崩溃。 通俗的来说,指…

macOS 开发环境配置与应用开发指南

macOS 开发环境配置与应用开发指南 macOS作为苹果公司推出的操作系统&#xff0c;因其稳定性、优雅的用户界面和强大的开发支持&#xff0c;已成为开发者和创意专业人士的首选平台之一。无论是开发iOS、macOS桌面应用&#xff0c;还是Web应用、跨平台程序&#xff0c;macOS都提…