小咸鱼Crystal的博客

Crystal这只咸鱼终于刷题了

UVa11809(算法竞赛入门经典习题3-12)

  被精度折磨。首先先上一个wa的代码。

#include<iostream>
#include <stdio.h>
#include <string.h>
#include <bits/stdc++.h>
using namespace std;

int trans(int a)
{
    int n=0;
    while(a!=0)
    {
       n++;
       a=a/2;
    }
    return n;
}

int trans1(double a)
{
    int n=0;
    while(a!=0)
    {
        n++;
        a=a*2;
        int b=(int)a;
        a=a-(double)b;
    }
    return n-1;
}

int main()
{
   double m;
    int e;
    string in;
    while(cin >> in && in != "0e0") {
        for(string::iterator i = in.begin(); i != in.end(); ++i) if(*i == 'e') *i = ' ';
        istringstream ss(in);
        ss >> m >> e;
        //printf("%.25lf\n",m);
        int num=0;
        for(int i=0;i<e;i++)
        {
            m=m*( double)10;
           // printf("%.25lf\n",m);
            while(m>1)
            {
               m=m/(double)2;
              // printf("%.25lf\n",m);
               num++;
            }
        }
       // printf("%.25lf\n",m);
        cout<<trans1(m)<<" "<<trans(num)<<endl;
    }
}
是的,我不是用打表法。度娘了很多发现基本都是打表。这个代码的唯一问题就是,精度不行。使用double,小数点15位之后基本都不能保证精度。GG.待我琢磨一下
阅读更多
个人分类: 算法竞赛入门经典
上一篇UVa10340题解(算法竞赛入门经典习题3-9)
想对作者说点什么? 我来说一句

算法竞赛入门经典各章习题答案

2011年10月09日 317KB 下载

没有更多推荐了,返回首页

关闭
关闭