题目描述
写一个程序,输入一个形如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)
参考代码
#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;
}
}
解析
暂无