题目21:火星符号
已知火星人使用的运算符号为#;$
其与地球人的等价公式如下
x#y=2x+3y+4
x
y
=
3
∗
x
+
y
+
2
x
y
是无符号整数地球人公式按照
c
语言规则进行计算火星人公式中
y=3*x+y+2 x y是无符号整数 地球人公式按照c语言规则进行计算 火星人公式中
y=3∗x+y+2xy是无符号整数地球人公式按照c语言规则进行计算火星人公式中符优先级高于#相同的运算符按从左到右的顺序运算
输入描述:
火星人字符串表达式结尾不带回车换行
输入的字符串说明是 字符串为仅有无符号整数和操作符组成的计算表达式
1.用例保证字符串中操作数与操作符之间没有任何分隔符
2.用例保证操作数取值范围为32位无符号整数,
3.保证输入以及计算结果不会出现整型溢出
4.保证输入的字符串为合法的求值报文
例如: 123#4$5#76$78
5.保证不会出现非法的求值报文
例如: #4$5 这种缺少操作数
4$5# 这种缺少操作数
4#$5 这种缺少操作数
4 $5 有空格
3+4-5*6/7 有其他操作符
12345678987654321$54321 32位整数溢出
输出描述:
根据火星人字符串输出计算结果
结尾不带回车换行
等价公式
x#y=2x+3y+4
x$y=3*x+y+2案例1:
输入:
7#6$5#12
输出:
226说明 示例7#6$5#12=7#(36+5+2)#12
=7#25#12
=(27+325+4)#12
=93#12
=293+3*12+4
=226
private static void hxr() {
Scanner scanner = new Scanner(System.in);
printValue(scanner.nextLine());
}
private static void printValue(String s) {
String jin = "#";
String mei = "$";
int total = 0;
if (s.contains(mei) && !s.contains(jin)) {
s = getMeiVales(s);
System.out.println(Integer.valueOf(s));
} else if (!s.contains(mei) && s.contains(jin)) {
total = getJinVales(s);
System.out.println(total);
} else if (s.contains(mei) && s.contains(jin)) {
s = getMeiVales(s);
total = getJinVales(s);
System.out.println(total);
} else {
System.out.println(s);
}
}
private static int getJinVales(String s) {
String jin = "#";
String[] split = s.split(jin);
int total = Integer.valueOf(split[0]);
for (int i = 1; i < split.length; i++) {
String content = split[i];
total = getJin(total, content);
}
return total;
}
private static String getMeiVales(String s) {
String jin = "#";
String mei = "$";
String[] split = s.split(jin);
for (int i = 0; i < split.length; i++) {
String content = split[i];
int total = 0;
if (content.contains(mei)) {
String[] split1 = content.split("\\$");
total = getMei(split1[0], split1[1]);
s = s.replace(content, String.valueOf(total));
}
}
return s;
}
private static int getJin(int x, String y) {
return (2 * x) + (3 * Integer.valueOf(y)) + 4;
}
private static int getMei(String x, String y) {
return (3 * Integer.valueOf(x)) + Integer.valueOf(y) + 2;
}