第一次写题解,WA了无数次还是没有发现问题,先放着吧,以后再回来研究(orz)
解题思路:暴力解法,因为直接用double很容易爆内存,所以用对数。
下面是 解题代码
。
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <cmath>
using namespace std;
#define esp 1e-7
int main(int argc, char** argv) {
double a;
int b;
while(scanf("%17lfe%d",&a,&b) && (b || a))//写成&&a时WA,(b||a)时就超时,试了好多数据都没发现问题
{
int m=0,e=0;
double s=log(a) + b*log(10);
double mv=0,ev=0;
int l=0;
for(m=0; m<=9; m++)
{
mv=1 - pow(2,-(m+1));
for(e=1; e<=30; e++)
{
ev=pow(2,e)-1;
if(abs(log(mv) + ev*log(2) - s) < esp)
{
l=1;break;
}
}
if(l) break;
}
cout<<m<<" "<<e<<endl;
}
return 0;
}