题目地址: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; }