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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值