UVA 11809 - Floating-Point Numbers
2018-01-25 01:00
337 查看
好了,两张贴图扔上来了(第一次试),大概说一下什么意思,浮点数的储存方式(阶码和尾数,尾数是少一个1的,阶码有表示正负的0/1),然后举个栗子姐姐:double是8个字节,我们现在随便malloc,然后尾数和阶码的数量随便定(0,9闭区间和1,30闭区间)我们输入一个最大值,再去判定这个最大值时尾数和阶码是几位(英语菜,小样看了半天才看懂......)然后,我们会发现2的30次方的时候(极限情况,300行输入)根本装不下(这只是10的次方项),所以我们肯定要砍点了,所以我们直接就不运算10的2的30次方的次方,直接log10()扔出来2的a次方,然后再加上一个log10(b)————(前面那个尾数),然后存入二维数组依次的尾数和阶码的那个position,打表完直接暴力搜索。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> int main() { //freopen("in.txt","r",stdin); double s[11][32]; memset(s,0,sizeof(s)); char n[100]; double a; int b,i; int c,d;//c是前面的数量,d是后面的 double e,f;//e记录前面的最大值,f记录后面的次方数 for(c=0; c<10; c++) { for(d=1; d<31; d++) { e=1-pow(2,-1-c); f=pow(2,d)-1;//多少次方 s[c][d]=f*log10(2)+log10(e); } } int flag; double x; while(1) { flag=0; scanf("%s",n); for(i=0;n[i]!='\0';i++) if(n[i]=='e'){n[i]=' ';break;} sscanf(n,"%lf %d",&a,&b); //printf("%lf %d",a,b); if(a==0&&b==0)break; x=b+log10(a); for(c=0; c<10; c++) { for(d=1; d<31; d++) { if(fabs(s[c][d]-x) <1e-5) { printf("%d %d\n",c,d); flag=1; break; } } if(flag==1)break; } // printf("yes"); } return 0; }
总结一下:
1.开始全无思路,翻译完一圈之后小样都没看懂,再看......
2.看懂了,开始设计情况,设计完发现没输出,有了那行cout<<yes;
3.数据跑完小样不对,第二个小样出的7,6,之前开1e-3,qq截图出7,6和8,6的差别,(变成了1e-5)
4.开始打表是c=1......好吧,菜。
综上所述:草稿纸确实是个好东西,(虽然我草稿纸天马行空),但是当时逻辑清晰多了。
(开始还比较飘打算不用pow,后来一想还有负数情况......算了,写个算平方的好麻烦......)
当时感觉pow有误差的嘛,后来想想要是真自己写一个都得用double,学校的题那是比较低端的int类型平方版本,尽量无误差。(误导啊)
相关文章推荐
- 【习题 3-12 UVA - 11809】Floating-Point Numbers
- 算法竞赛入门经典(紫书)第三章——Floating-Point Numbers UVA-11809
- UVA 11809 Floating-point numbers
- UVA-11809 Floating-Point Numbers
- UVa 11809 - Floating-Point Numbers(取对数)
- UVa 11809 Floating-Point Numbers(浮点数)
- uva - 11809 - Floating-Point Numbers
- UVa11809 - Floating-Point Numbers
- UVA - 11809 Floating-Point Numbers
- UVA 11809 - Floating-Point Numbers
- UVA 11809 Floating-Point Numbers
- UVa 11809 - Floating-Point Numbers
- UVa 11809 Floating-Point Numbers
- Uva - 11809 - Floating-Point Numbers
- UVA 11809 - Floating-Point Numbers【浮点数】
- 算法竞赛入门经典第三章3-12 Floating-Point Numbers UVA - 11809
- Floating-Point Numbers UVA - 11809
- UVa 11809:Floating-Point Numbers
- Uva - 11809 - Floating-Point Numbers
- UVA11809 - Floating-Point Numbers