#P1943. Nasty Calculations
Nasty Calculations
题目描述
你的朋友Joe忘记做数学作业了。他的老师非常生气(你猜是为什么),他命令Joe放学后留下来计算一个巨长的表达式。可是该老师十分懒,以致想不出许多不同的表达式,因此他给Joe一个带有变量x的公式f,并且x可能是个巨大的数(显然你明白这是多么容易的一件事情),Joe的任务就是对于每个给出的x值,计算该表达式f(x)的结果。 实际上,Joe不需要计算出f(x)的精确值,因为可能结果十分巨大,他只要写出f(x)的最后一个数字即可(Joe想当然认为老师能计算的上限为100,但是……,只有天知道!)。 因为上次课的内容是讲数制字系统,因此实际上老师给出的是基于B进制的数值表达式f(x)。 任务 对于x的给出包含x的巨大公司,Joe希望寻求你的帮助,因为他知道你是一个优秀的程序设计员,他认为你可以使用计算机来解决该问题,为了帮助你完成任务,他重写了该公式,将f变成了一个后缀表达式(下面会解释),这有利于计算机的计算,你的任务就是在B进制系统下,计算这个巨大公式的数值。 后缀表达式 后缀表达式(也称之为逆波兰表达式RPN)是一个二元数学表达式的方式。当然使用最多的是中缀表达式,操作符放在操作数的中间,例如,1+2,1+2*3,or (1+2)*3。通常不喜欢后缀表达式,操作符放在操作数的后面,例如上面的表达式形式为1 2+,1 2 3 * +,和1 2 + 3 * 。 这种RNP表达式尽管人们看起来十分不习惯,但计算机写程序计算起来方便,因为它没有括号,容易编程。 B进制数值系统 一个数通常使用十进制数值系统,在这个系统中,一个数字序列dkdk-1¬……d1d0表示数dk10k+dk-110k-1+……+d.1101+d0100。如果数值10用整数B,B≥2,and 0≤di≤B-1,我们称之为B进制数字系统。B进制数值系统可以写成dkdk-1¬……d1d0形式,表示dkBk+dk-1Bk-1+……+d.1B1+d0B0。当然因为我们只有10个数字,因此大于9的数字不许用字母表示:A表示10,B表示11,等等,例如十进制数29用6进制系统表示为45,用16进制系统表示为1D。
输入格式
第一行包含两个整数B和N,B(2≤B≤36),N(1≤N≤100 000) 第二行为后缀表达式。数据元素之间用一个空格分开。这些元素为: •一个基于B进制数值系统下的数字和大写字母的竖列,最大数值不超过2 000 000 000。 •小写字母 x,表示表达式中的变量。 •操作符号 +。 •操作符号 -。 •操作符号 *。 接下来有N行,每行一个包含数字和大写字母的序列,表示基于B进制数值系统下的变量x的数值,x不超过2 000 000 000。 假设表达式对于所有的输入数据都正确,第二行的表达式的长度不超过100 000个字符。
输出格式
输出包括N行,第i行为输入的第i+2个数据对应的表达式结果的最后一个数字(基于B进制数值系统下)。你可以假设对所有的x,f(x)的结果非负。
15 4
2 x * 123A +
1
2
3
4
C
E
1
3