快速浏览一下这题,二分法+高精度,然后看各个函数过程的功能。可以知道 addadd 就是加,看这个函数 addadd 里面,的确是 a+ba+b,然后就可以很快得出 ③,注意之前有进位,它还要加上它自己。
既然这一模块唯一的空已经很快填好了,就可以不看这块了,知道这是个 a+ba+b 的函数就行了。接下来看到 averageaverage,averageaverage 就是平均,看主过程,middle=average(left,right);这是求 aa 和 bb 的平均值,里面有个 ④,可以轻松看出 ④ 所在的循环是 ansans 已经等于 a+ba+b 了,现在正在除以 22。模拟笔算用的竖式除法,可以知道 ④ 这个地方是退位,就用 ans.num[i] %2就行了。
然后看到 plustwoplustwo,plustwoplustwo 的意思就是“加二”,这里面只有一个空,是 ⑤。不用看上面,只看 ⑤ 所在的 if 语句,就知道这里应该是对 ans.lenans.len 的修正,应该填ans.len++。
再看到 overover,在主程序里知道这是个二分用的判断函数。看到 overover 中的if( a.len>b.len)这段,得知如果 aa 比 bb 长,也就是 aa 比 bb 大,那 overover 就为真。看来这个 overover 就是个比大小的函数,a>ba>b 为真,a<ba<b 为假。 ⑥ 所在的地方与下面类似,所以写上a.len<b.len。
还有一个函数没看到,那就是 timestimes,timestimes 就是乘法,这是个 a\times ba×b 的高精度乘法函数,从而可以轻易写出 ① 和 ② 。
最后主程序还有两个空,第一个空 ⑦ 是字符转数字,较简单;第二个空是在 over()over() 里面,而且可以发现,整个程序都没用到 timestimes,肯定是这里用了。最后联系上下文,得出这里是 times(middle,middle),target,比较 middlemiddle 的平方与 targettarget。