转一个别人写的优秀代码 Octal Fractions

来源:互联网 发布:网络攻防技术有哪些 编辑:程序博客网 时间:2024/05/23 10:12

 

#include<cstdio> #include<cstring> char c[50]; int i,l; double x,y; int main() {     while(scanf("%s",c)!=EOF)     {         printf("%s [8] = ",c);         l=strlen(c)-1;         x=0;         y=1;         for(i=l;i>1;i--)         {             x=((c[i]-'0')*y+x)*125;             y*=1000;         }         x/=y;         i=0;         while(x)         {             c[i]=int(x*=10)%10+'0';             x-=c[i]-'0';i++;         }         c[i]='\0';         printf("0.%s [10]\n",c);     } 

}
 

这个算法是将除法转变为乘法,对于0.d1d2d3 ... dk [8],本来是d1/8+d2/(8^2)+...+dk/(8^k),这个算法将 dn/8转变为 dn * 125,然后不断让 y 乘以 1000,起到保存小数位数的作用,最后的结果就相当于是 对dn每次乘以0.125。

原创粉丝点击