Skip to content

12102: 【原2102】Hex表达式

题目

题目描述

author: xcyan 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/2102

Description

大脸终于破译出了饼意的情书,当他洋洋得意之时,刁哥推开了宿舍的门:“大脸,快来帮我算Hex表达式。”

众所周知,二进制在计算机领域有着举足轻重的地位,同时二进制又与八进制,十六进制有着十分密切的关系。

类比十进制数,一个二进制数只有两种数码0和1,八进制数有八种数码0—7,十六进制有十六种数码0—15 其中,10用小写字母a来代替,11用小写字母b来代替,12用小写字母c来代替,依次类推。

类比一个二进制数转成十进制数的过程:

(100101)2 = (1 * 2^5 + 1 * 2^2 + 1* 2^0)10

那么一个十六进制数专成十进制数的过程应该如下:

(a0e)16 = (10 * 16^2 + 0 * 16^1 + 14 * 16^0)10

现在,我们遇到了这样一个问题,计算hex表达式的值。

再次类比十进制表达式运算法则: 先计算运算符优先级较高的,再计算较低的;如果有括号则先计算括号里的表达式。

比如一个表达式\( (X + Y) * (Z + W) + M \)

先计算 \( X + Y \) 与 \( Z + W \),再将算好的值代入,计算\( (X + Y) * (Z + W) \), 最后计算\( (X + Y) * (Z + W) + M \)

现在定义hex表达式运算法则:

1)每个运算数是合法的十六进制数,为了简化问题,我们假定都为非负数。
2)hex表达式只包含圆括号,加法和乘法。
3)运算符的优先次序与十进制表达式相同。

如下都是合法的hex表达式:

(1af + 23) * (3d + (5 + ff)) + 9
1 + ff + f * f * (e + 1) * (1 * 2) 
43ecb + 58

现在要求写一个程序来解决此问题。

Input Format

一行,一个合法的hex表达式,输入保证表达式中无多余的空格。

Output Format

一行,hex表达式的值,用十六进制表示

Sample Input

1+a

Sample Output

b

About Testdata

40%的数据,满足表达式只有一个运算符,即X+Y或X*Y的形式,且没有多余括号。

另外30%的数据,满足表达式中没有括号,而且不存在连乘形式,即没有XYZ的形式。

100%的数据,满足表达式长度小于400个字符,输出结果不超过fffffff。(中间结果也不会超过)

Limits

Time limit: 1000ms, memory limit: 50000kb.

Oops! 本题目还没有解答!

助教老师们编题的速度,已经超过了解题的速度!

OJ翻了一新,但本解答集还大多用的是2017-2019级,甚至更早的同学们贡献的答案。

如果你已经AC了,可以的话,请您参考添加页面,与大家一起分享你的题解!