这题乍一看觉得好蛋疼(广东话叫“DUM春”),我是要把所有的表达式都简化到最短,还是把所有表达式都展开到最长?最麻烦的就是有个变量a,好了下面是正文了。
——————————正文——————————
从这题我就学醒目了,类似近似的思想,从题干可以知道最高的次数是10···其实不是10,因为可以是这样:a^10^10^10^10.... 这样一直下去,从题干知道最长为50个字符,每个^10占3个字符,所以最多会有a^160,两条这样的曲线公共点个数的上界是160个,也就是说,对a进行161次试值,如果两个表达式相等,那么就可以认为两个表达式是等价的。
说多一句····到网上一搜可以发现,不少通过的代码使用3次试值若相等就判断表达式是相等的了,不过我个人还是觉得161次的试值是最保险的。
还有一点要注意的是,我一开始计算的是:10^10^10=10^10000000000,这样就悲剧了···哈哈。可能很多同学使用2来测试2^2^2的两种计算方法是否相等,但是这样计算出来相等是个巧合,可以直接假设要求的是a^b^c,对于两种运算顺序,取log,其中一个结果是(b^c)*log(a),另外一个是b*c*log(a),所以两种运算顺序得到的结果是不一样的。
这样就解决表达式的判断问题了。
然后就是怎么样计算表达式的值,很多的童鞋肯定看过中缀转后缀表达式,最