UVa 11809 - Floating-Point Numbers
Posted nicetomeetu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 11809 - Floating-Point Numbers相关的知识,希望对你有一定的参考价值。
十进制转二进制存储需要几位
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; }
以上是关于UVa 11809 - Floating-Point Numbers的主要内容,如果未能解决你的问题,请参考以下文章
通过vjudge刷Uva的题目(解决Uva网站打开慢的问题)
UVa中国麻将(Chinese Mahjong,Uva 11210)