洛谷 - P1957 口算练习题 - AC CODE
1.洛谷 - P1957 口算练习题 - AC CODE
2.牛客 - HJ50 四则运算 - AC CODEP1957 口算练习题
题目描述
王老师正在教简单算术运算。细心的王老师收集了 i 道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如 5 + 8
的算式最好只要输入 5 和 8 ,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 5+8=13
以及该算式的总长度 6 。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。
输入格式
第一行一个整数 i。
接着的 i 行为需要输入的算式,每行可能有三个数据或两个数据。
若该行为三个数据则第一个数据表示运算类型,a 表示加法运算,b 表示减法运算,c 表示乘法运算,接着的两个数据表示参加运算的运算数。
若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。
输出格式
输出 i 行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度。
输入输出样例 #1
输入 #1
4
a 64 46
275 125
c 11 99
b 46 64
输出 #1
64+46=110
9
275+125=400
11
11*99=1089
10
46-64=-18
9
说明/提示
【数据规模与约定】
对于 50% 的数据,输入的算式都有三个数据,第一个算式一定有三个数据。
对于所有数据,0 < i <= 50,运算数为非负整数且小于 10000。
AC CODE
本题用 Java 真的非常好写
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
public static class Calculate {
int a, b, anser;
char op; // 操作符
public Calculate(int a, int b, char op) { // 构造函数
this.a = a;
this.b = b;
this.op = op;
// 在构造函数中直接得出结果
if (op == 'a') {
this.anser = a + b;
} else if (op == 'b') {
this.anser = a - b;
} else {
this.anser = a * b;
} // 没做数据异常处理 ~~有恃无恐bushi~~
}
public String toString() {
// 结果输出 不能直接用 a + op + b + " " + anser,op会被参与逻辑运算
if (op == 'a') {
return (a + "+" + b + "=" + anser);
}
if (op == 'b') {
return (a + "-" + b + "=" + anser);
}
if (op == 'c') {
return (a + "*" + b + "=" + anser);
}
return (a + "+" + b + "=" + anser); // 默认当成加法运算
}
}
public static void main(String[] args) {
int qnum;
List<Calculate> calculateList = new ArrayList<>();
try (Scanner scanner = new Scanner(System.in)) {
qnum = scanner.nextInt();
char opare = 'a';
@SuppressWarnings("unused")
String t = scanner.nextLine(); // 输入 num 之后会有一个空行
while (qnum > 0) {
String str = scanner.nextLine();
String[] dataArr = str.split(" "); // 根据 分割字符串
int read = 0; // 标记数字出现的下标
// 判断第一个字符是不是操作符
if (dataArr[0].length() == 1
&& dataArr[0].charAt(0) >= 'a'
&& dataArr[0].charAt(0) <= 'c') {
opare = dataArr[0].charAt(0);
read++;
}
int anum = Integer.valueOf(dataArr[read]);
read++;
int bnum = Integer.valueOf(dataArr[read]);
Calculate calculate = new Calculate(anum, bnum, opare);
calculateList.add(calculate);
qnum--;
}
}
for (Calculate calculate : calculateList) {
String anser = calculate.toString();
System.out.println(anser);
System.out.println(anser.length());
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理