华为od(D卷)火星文计算

文章目录

题目描述

已知火星人使用的运算符为#、$,其与地球人的等价公式如下:

x#y = 2x+3y+4

x$y = 3*x+y+2

1 其中 x、y 是无符号整数

2.地球人公式按 C 语言规则计算

3.火星人公式中,$的优先级高于#,相同的运算符,按从左到右的顺序计算。现有一段火星人的字符串报文,请你来翻译并计算结果

输入描述

火星人字符串表达式(结尾不带回车换行)输入的字符串说明: 字符串为仅由无符号整数和操作符 (#、)组成的计算表达式例如: 123#4S5#6778

1.用例保证字符串中,操作数与操作符之间没有任何分隔符

2.用例保证操作数取值范围为 32 位无符号整数

3.保证输入以及计算结果不会出现整型溢出

4.保证输入的字符串为合法的求值报文,例如: 123#45#6778

5.保证不会出现非法的求值报文,例如类似这样字符串:

#4$5 //缺少操作数

4$5# //缺少操作数

4#$5 //缺少操作数

4 $5 //有空格

3+4-5*6/7 //有其它操作符

12345678987654321$54321 //32 位整数计算溢出

输出描述

根据输入的火星人字符串输出 Q 计算结果 (结尾不带回车换行)

示例1

输入

7#6$5#12
输出

226
说明

7#6$5#12=7#(36+5+2)#12
=7#25#12
=(2
7+325+4)#12
=93#12
=2
93+3*12+4

=226

思路

正则匹配

代码

java 复制代码
public class Demo17 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            // 火星文
            String line = in.nextLine();

            // 先计算 $操作
            Pattern compile = Pattern.compile("(\\d+)\\$(\\d+)");
            Matcher matcher = compile.matcher(line);
            while (matcher.find()) {
                String subString = matcher.group(0);
                Integer x = Integer.valueOf(matcher.group(1));
                Integer y = Integer.valueOf(matcher.group(2));
                line = line.replace(subString, String.valueOf(3 * x + y + 2));
                matcher = compile.matcher(line);
            }
            if (!line.contains("#")) {
                System.out.println(line);
            } else {
                // 在计算 #操作
                List<Integer> collect = Arrays.stream(line.split("#")).map(Integer::valueOf).collect(Collectors.toList());
                int a = collect.get(0);
                for (int i = 1; i < collect.size(); i++) {
                    int b = collect.get(i);
                    a = 2 * a + 3 * b + 4;
                }
                System.out.println(a);

            }


        }
        in.close();


    }
}
相关推荐
渴望技术的猿15 分钟前
Windows 本地部署MinerU详细教程
java·windows·python·mineru
diving deep17 分钟前
XML简要介绍
xml·java·后端
Uranus^19 分钟前
深入解析Spring Boot与Redis集成:高效缓存实践
java·spring boot·redis·缓存
小吕学编程21 分钟前
Jackson使用详解
java·javascript·数据库·json
珊瑚里的鱼29 分钟前
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
开发语言·c++·笔记·算法·leetcode·stl
落樱弥城33 分钟前
角点特征:从传统算法到深度学习算法演进
人工智能·深度学习·算法
总是难免39 分钟前
设计模式 - 单例模式 - Tips
java·单例模式·设计模式
晚秋大魔王42 分钟前
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——wget
java·linux·运维·开发语言·华为·harmonyos
heath ceTide1 小时前
轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal
java·开发语言
_extraordinary_1 小时前
Java 常用的Arrays函数
java·开发语言