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

每日一题之老式计算器

老式的计算机只能按照固定次序进行运算,华安大学就有这样一台老式计算机,计算模式为A @ B #C,@和#为输入的运算符(可能是+、-或*,运算符优先级与C++一致),现给出A,B,C的数值以及@和#对应的运算符,请你编写程序,验证老式计算机的运行结果。

输入说明:
    第一行是一个整数N(|N|≤10000),表示有N组计算数据需要处理,接下来N行,每行是相应的数据,包括三个整数和两个运算符,分别对应A、@、B、#和C。

输出说明:
对每行输入的数据,输出计算结果。

输入样例:
3
1+2*3
3*2-1 
5+7-9
输出样例:
7
5
3

#include <iostream>
#include <sstream>
#include <string>
using namespace std;int main() {int N;cin >> N;  // 读取计算数据组数string expression;getline(cin, expression);  // 读取剩余的换行符while (N--) {getline(cin, expression);  // 读取每行表达式stringstream ss(expression);int A, B, C;char op1, op2;// 解析A, 运算符@, B, 运算符#, Css >> A >> op1 >> B >> op2 >> C;// 先根据运算符优先级处理乘法和除法if (op1 == '*'){if(op2=='*'){printf("%d",A*B*C);}else if(op2=='+'){printf("%d",A*B+C);}else if(op2=='-'){printf("%d",A*B-C);}}else if(op1=='-'){if(op2=='*'){printf("%d",A-B*C);}else if(op2=='+'){printf("%d",A-B+C);}else if(op2=='-'){printf("%d",A-B-C);}	}else if(op1=='+'){if(op2=='*'){printf("%d",A+B*C);}else if(op2=='+'){printf("%d",A+B+C);}else if(op2=='-'){printf("%d",A+B-C);}}}return 0;
}

优化后的代码

#include <iostream>
#include <sstream>
#include <string>
using namespace std;// 单个运算符的计算函数
int calculate(int left, char op, int right) {switch (op) {case '+': return left + right;case '-': return left - right;case '*': return left * right;default: return 0;}
}int main() {int N;cin >> N;cin.ignore();  // 忽略换行符while (N--) {string expression;getline(cin, expression);stringstream ss(expression);int A, B, C;char op1, op2;// 解析 A, 运算符 op1, B, 运算符 op2, Css >> A >> op1 >> B >> op2 >> C;int result;if (op2 == '*') {// 先计算 A @ B,因为 @ 为 '*'int temp = calculate(B, op2, C);result = calculate(A, op1, temp);} else {// 若都不是 '*', 从左到右依次计算result = calculate(calculate(A, op1, B), op2, C);}// 输出结果cout << result << endl;}return 0;
}

http://www.mrgr.cn/news/67292.html

相关文章:

  • 无需手动部署的正式版comfyUI是否就此收费?开源等同免费?
  • 定时任务——xxl-job原理与实现
  • 系统思考—深层结构
  • 【客户服务】全员服务
  • 查看网路信息-ifconfig命令
  • 目前主流的人工智能学习框架有哪些?
  • Java项目实战II基于Spring Boot的药店管理系统的设计与实现(开发文档+数据库+源码)
  • set和map的使用
  • 大模型微调:Adapter;在大模型基础上增加低秩矩阵或者adapter有什么用,这样还增加运算
  • chromium和Blink引擎,内存的管理策略
  • 【Android】时区规则库tzdata更新
  • 【Hadoop和Hbase集群配置】3台虚拟机、jdk+hadoop+hbase下载和安装、环境配置和集群测试
  • web——[SUCTF 2019]EasySQL1——堆叠注入
  • 链表拆分与快慢指针相关算法题
  • Go语言基础语法
  • WebGUI之Gradio:Gradio 5的简介、安装和使用方法、案例应用之详细攻略
  • Cerebellum:浏览器 AI 助手,基于 Claude 3.5 Sonnet 和 Selenium WebDriver 执行网页自动化任务
  • 二进制流文件下载和预览
  • SpringBoot3集成Junit5
  • C++ 多态