你的朋友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。