阅读背景:

转一个别人写的优秀代码 Octal Fractions(转自poj)

来源:互联网 
#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]='
#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。


'; printf("0.%s [10]\n",c); } } #include<cstdio> #include<cstring> char c[5



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: