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了,可以的话,请您参考添加页面,与大家一起分享你的题解!