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

文章目录

题目描述

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

x#y = 2x+3y+4

x$y = 3*x+y+2

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

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

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

输入描述

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

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

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

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

4.保证输入的字符串为合法的求值报文,例如: 123#4$5#67$78

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();


    }
}
相关推荐
九圣残炎8 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge10 分钟前
Netty篇(入门编程)
java·linux·服务器
lulu_gh_yu13 分钟前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!33 分钟前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚37 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
雷神乐乐43 分钟前
Maven学习——创建Maven的Java和Web工程,并运行在Tomcat上
java·maven
码农派大星。1 小时前
Spring Boot 配置文件
java·spring boot·后端
顾北川_野1 小时前
Android 手机设备的OEM-unlock解锁 和 adb push文件
android·java
江深竹静,一苇以航1 小时前
springboot3项目整合Mybatis-plus启动项目报错:Invalid bean definition with name ‘xxxMapper‘
java·spring boot
confiself1 小时前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言