0.75 0.0001 0.01234567
0.75 [8] = 0.953125 [10] 0.0001 [8] = 0.000244140625 [10] 0.01234567 [8] = 0.020408093929290771484375 [10]
这道题应该属于基础题了,刚开始看到这到题的时候,以为是高精度的题,开始都不敢用double来做,后来看到那个那个8进制数的范围才15,所以想到double也应该可以做吧,参考了一下别人的思路,好巧妙啊,直接通过字符串倒序处理,把8进制小数转化为十进制的整数,值得学习啊~
下面是代码。好简短的,主要是要掌握这种思路,这种巧妙的写法;
和以前我们普通的求法不一样;
0.75(8)=5/64+7/8;
#include <cstdio> #include <cstring> int main() { char s[20]; int len; double n; while(scanf("%s",s)!=EOF) { n=0; len=strlen(s); for(int i=len-1;s[i]!='.';i--)//小数点前面的处理 { n/=double(8.0);//转化为十进制 n+=double(s[i]-'0'); } n/=double(8.0);//小数点前那一个还没处理 printf("%s",s); printf(" [8] = %.45g [10]\n",n);//%g指代浮点数,去掉无意义的零 } return 0; }
poj 百练 2765 八进制小数(精度问题),布布扣,bubuko.com
原文地址:http://blog.csdn.net/whjkm/article/details/38496637