• UVa 11809


    十进制转二进制存储需要几位

    m*2^e=a*10^b;
    log10(m)+e*log10(2)=log10(a)+b;
    m=1-2^(-i-1)
    e=2^j-1

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    using namespace std;
    double f[10][35];
    char s[100];
    double a,c;
    int b;
    void fuc()
    {
        double m=1,e;
        for(int i=0;i<=9;++i)
        {
            m/=2;
            e=1;
            for(int j=0;j<=30;++j)
            {
                f[i][j]=log10(1-m)+log10(2)*(e-1);//用log存储 
                e*=2; 
            }
        }
    }
    int main()
    {
        fuc();
        while(~scanf("%s",s)&&strcmp(s,"0e0"))
        {
            s[17]=' ';
            sscanf(s,"%lf%d",&a,&b);
            c=log10(a)+b; 
            for(int i=0;i<=9;i++)
            {
                for(int j=0;j<=30;j++)
                {
                    if(fabs(c-f[i][j])<1e-7)
                    {
                        cout<<i<<' '<<j<<endl;
                        break;
                    }
                }
            }
        }
        return 0;
    } 
    我自倾杯,君且随意
  • 相关阅读:
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
    算法の序列
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/5335457.html
Copyright © 2020-2023  润新知