题目地址:http://uva.onlinejudge.org/external/118/11809.pdf
目前花时间最长的一题……
输入方式算个小坑吧不仔细浪费了很多时间,最先想到的办法就是查表,可是做题太少还妄想用奇怪的办法,最终自己的不成熟的方法打表贡献了好几次WA。
表打好之后精度问题也让我很茫然,看了其他大神的题解直接借鉴了1e-4。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int n1,m1,b,i,j,time=0;
double I,J,ci,t,test,a,sum,min,m,e,y[100][100];
long long x[100][100];
char c[20];
while(1)
{
test=0;
n1=0,m1=0;
time++;
if(time!=1) getchar();
a=0,m=0,min=1;
for(i=0;;i++)
{
scanf("%c",&c[i]);
if(c[i]=='e') break;
if(c[i]=='.') {i--;continue;}
a+=pow(10,-i)*(c[i]-48);
}
scanf("%d",&b);
if(c[0]=='0'&&c[1]=='e'&&i==1&&b==0) return 0;
while(a<1) {a*=10;b--;}
for(i=0;i<=9;i++)
{
for(j=1;j<=30;j++)
{
m=1-pow(2,-1-i),e=pow(2,j)-1;
t=log10(m)+e*log10(2);
x[i][j]=t,y[i][j]=pow(10,t-x[i][j]);
if(x[i][j]==b)
{
if(fabs(a-y[i][j])<1e-4)
test=1;
}
if(test) break;
}
if(test) break;
}
printf("%d %d\n",i,j);
}
return 0;
}