当前位置: 首页 > article >正文

【NOIP普及组】表达式求值

【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.kler.cn/a/412333.html

相关文章:

  • Java学习笔记--继承方法的重写介绍,重写方法的注意事项,方法重写的使用场景,super和this
  • npm install -g@vue/cli报错解决:npm error code ENOENT npm error syscall open
  • C#基础56-60
  • JavaScript核心语法(3)
  • 基于混合ABC和A*算法复现
  • day04 企业级Linux安装及远程连接知识实践
  • 学习threejs,设置envMap环境贴图创建反光效果
  • Qt程序发布及打包成exe安装包
  • 微信小程序首页搜索框的实现教程
  • idea_常用设置
  • RSA算法和AES算法,哪种更安全
  • 电脑自动关机时间如何定?Wise Auto Shutdown 设置关机教程
  • C++网络编程:select IO多路复用及TCP服务器开发
  • 三格电子—EtherNet IP转Modbus RTU网关
  • Docker安装及常用命令
  • 信息安全实验--密码学实验工具:CrypTool
  • Rust学习(九):密码生成器
  • QT:生成二维码 QRCode
  • AIGC学习笔记(7)——AI大模型开发工程师
  • LeetCode题练习与总结:第三大的数--414
  • 【设计模式】【行为型模式(Behavioral Patterns)】之责任链模式(Chain of Responsibility Pattern)
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】
  • 【力扣】125. 验证回文串
  • 集成金蝶云星空数据至MySQL的完整案例解析
  • 【es6】原生js在页面上画矩形及删除的实现方法
  • 【Linux】基础IO-文件描述符