【NOIP普及组】表达式求值
|-----------------------------|
| 💐The Begin💐点点关注,收藏不迷路💐 |
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符"+"和乘法运算符"*",且没有括号,所有参与运算的数字均为0到2^31-1之间的整数。输入数据保证这一行只有0~9、+、*这12种字符。
输出
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4位时,请只输出最后4位,前导0不输出。
样例输入
c
1+1*3+4
样例输出
c
8
C语言代码
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++ 代码
cpp
#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代码
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代码
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💐点点关注,收藏不迷路💐 |