UVA-11809 Floating-Point Numbers

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

你可能感兴趣的:(UVA-11809 Floating-Point Numbers)