这道题目让我重新认识了找到程序的bug是多么难的一件事情。
以下是找错过程,记录一下,真是让我难忘。
先说一下自己遇到的问题与一些感悟,刚开始在本地写的时候,没有注意到求平均值,直接求和了,看到示例,才发现忽略了求平均值,于是就又加了一部分。原本想着这样就可以了,应该没有什么大问题了。
结果提交了上去,只通过了两个测试点,根据错误的提示,有一条是 若不随时化简,则会溢出,然后意识到自己是求出所有分母的最小公倍数,然后通分做的求和,分母的最小公倍数确实可能超出 int , 意识到这个,我又改写成了,每次加一个分数,然后化简后得到结果,循环这样处理,直到处理所有分数。
然后再次提交,这次又过了一个测试点,还有一个没过,给了一个新错误提示 浮点错误,想了半天,还是不知道错在哪里,还好的是旁边有帮助信息,进去查看一下,看到了浮点错误,提示道 可能遇到了 除0 错误。想了一下,因为我在程序里除数几乎都是最大公约数,难道是求出来的最大公约数有 0。这样一想,确实有可能,分子求和可能为 0,这只能说明我写的求最大公约数的函数有问题,又认真的看了一下, 确实如果有 0 作为参数,会返回 0。那么就对 0 特殊处理一下,自己给个样例测试一下,没有问题了,我想这次提交应该就能过了吧。
结果就是那么残忍,还是没过,不过 浮点错误消失了,又出现了 若不随时化简,则会溢出,什么情况,这怎么可能,我写的是每次对一个分数求和呀,每次都化简了呀。想了好久,会不会是因为分子太大了,是不是需要将假分数 换算成 真分数呢。实在没想到其他的错误可能,就按这个方向修改吧,tuple 中再增加一个 int 来保存真分数的整数部分,对函数修改了一下,再拿样例试一下,没得问题,ok,继续提交。
看到提交后提示的结果,我真的不知道说些什么好了,错误的监测点依旧没通过,错误也是没变。让人绝望呀,这不可能呀,整数部分单