这题有点逼近我的智商上限了,看了好几遍才明白大概意思。编程的时候脑子里一直有点乱,卡了我将近一周,代码整体重写了三次。每次都可以实现样例,但是一直WA。
本来都打算跳过去了,但总是有点不甘心。
决定尝试最后一次:把所有可能情况的输入数据都算出来当做测试数据,最终发现WA是由于浮点数转换成整数时的系统误差导致的。
印象里书中样例曾经在浮点数转换整数时+0.5,我这里没有这样做
结果在某个测试样例中double 1.0000000*1000000000转换为整数的结果成了999999999,最终导致WA。
修改了这个bug后,顺利ac。
思路如下:
1.利用10^1=1.25*2^3逐级推算出1<=n<=10时10^n与2^m的换算公式组
2.推算出0<=M<=9各值时所有的十进制小数尾数,得到M表
3.推算出1<=E<=30各值时所有的2的十进制阶数,得到E表
4.读入s串并分割,把输入尾数存在double ap中,阶码存在int B中
5.利用第一步中求出的公式把10^int B转换为中转十进制浮点数double zz*(2^int E)其中1<=zz<2
6.计算出中转十进制浮点数zz* ap 结果存入 double apzz,其中0.5<=apzz<1,并修正E值
7.用apzz在M表中查询,得到M值
8.用E在E表中查询,得到E值
//#define LOCAL
//#define TESTING
#