2.4.5 Fractions to Decimals 分数化小数

2.4.5 Fractions to Decimals 分数化小数

时间: 1ms        内存:64M

描述:

写一个程序,输入一个形如N/D的分数(N是分子,D是分母),输出它的小数形式。
如果小数有循环节的话,把循环节放在一对圆括号中。例如,
1/3 = .33333333 写成0.(3)
41/333 = 0.123123123... 写成0.(123)
用xxx.0 成表示整数
典型的转化例子:
1/3 = 0.(3)
22/5 = 4.4
1/7 = 0.(142857)
2/2 = 1.0
3/8 = 0.375
45/56 = 0.803(571428)

输入:

单独的一行包括被空格分开的 N和D, 1 <= N,D <= 100000。

输出:

小数的表示方法上面说的很明白了,如果输出的长度超过76个字符,每行输出76个。

示例输入:

45 56

示例输出:

0.803(571428)

提示:

参考答案(内存最优[1488]):

#include<stdio.h>
int a[100001],count=2;
int main()
{
	int xun(int i,int j);
	int m,n,i,j,q,c,l;
	scanf("%d %d",&m,&n);
	for(i=0;i<=100000;i++)
	{
		a[i]=m/n;
		m=(m%n)*10;
		if(m==0)
		{
			l=i;
			break;
		}
		
	}
	printf("%d.",a[0]);
	c=a[0];
	 while(c>0)
	 {
		c=c/10;
		if(c==0)
		{
			count++;
		}
	}
	if(m!=0)
	{
	for(i=1;i<=100000;i++)
	{
		for(j=i+1;j<100000;j++)
		{
			if(a[i]==a[j])
			{
				if(xun(i,j)==1)
				{
					break;
				}
			}
		}
		if(xun(i,j)==1)
		{
			break;
		}
	}
	for(q=1;q<=100000;q++)
	{
		if(count%76==0)
		{
			printf("\n");
		}
		if(q!=i)
		{
			printf("%d",a[q]);
			count++;
		}
		if(q==i)
		{
			printf("(");
			count++;
            if(count%76==0)
			{
			   printf("\n");
			}
			printf("%d",a[q]);
			count++;
		}
		if(q==j-1)
		{
			printf(")");
			break;
		}
	}
	}
	else
	{
		printf("%d",a[1]);
		count++;
       for(i=2;i<=l;i++)
	   {
          if(count%76==0)
		  {
		      printf("\n");
		  }
          printf("%d",a[i]);
		  count++;
		  
	   }
	}

}
int xun(int i,int j)
{
	for(j,i;j<=100000;i++,j++)
	{
		if(a[i]!=a[j])
		{
			break;
		}
	}
	if(j>100000)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

参考答案(时间最优[4]):

#include<stdio.h>
int a[100001],count=2;
int main()
{
	int xun(int i,int j);
	int m,n,i,j,q,c,l;
	scanf("%d %d",&m,&n);
	for(i=0;i<=100000;i++)
	{
		a[i]=m/n;
		m=(m%n)*10;
		if(m==0)
		{
			l=i;
			break;
		}
		
	}
	printf("%d.",a[0]);
	c=a[0];
	 while(c>0)
	 {
		c=c/10;
		if(c==0)
		{
			count++;
		}
	}
	if(m!=0)
	{
	for(i=1;i<=100000;i++)
	{
		for(j=i+1;j<100000;j++)
		{
			if(a[i]==a[j])
			{
				if(xun(i,j)==1)
				{
					break;
				}
			}
		}
		if(xun(i,j)==1)
		{
			break;
		}
	}
	for(q=1;q<=100000;q++)
	{
		if(count%76==0)
		{
			printf("\n");
		}
		if(q!=i)
		{
			printf("%d",a[q]);
			count++;
		}
		if(q==i)
		{
			printf("(");
			count++;
            if(count%76==0)
			{
			   printf("\n");
			}
			printf("%d",a[q]);
			count++;
		}
		if(q==j-1)
		{
			printf(")");
			break;
		}
	}
	}
	else
	{
		printf("%d",a[1]);
		count++;
       for(i=2;i<=l;i++)
	   {
          if(count%76==0)
		  {
		      printf("\n");
		  }
          printf("%d",a[i]);
		  count++;
		  
	   }
	}

}
int xun(int i,int j)
{
	for(j,i;j<=100000;i++,j++)
	{
		if(a[i]!=a[j])
		{
			break;
		}
	}
	if(j>100000)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注