洛谷 - P1957 口算练习题 - AC CODE

P1957 口算练习题

P1957 口算练习题

题目描述

王老师正在教简单算术运算。细心的王老师收集了 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());
        }
    }
}
posted @   木槐muhuai  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示