您的位置:首页 > 其它

问题 H: 2.4.5 Fractions to Decimals 分数化小数

2016-03-19 12:48 381 查看

测试中,如有问题请联系17862809558 17862818011 18865513850 18865513930

问题 H: 2.4.5 Fractions to Decimals 分数化小数

题目描述

写一个程序,输入一个形如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>

#include<string.h>

#define M 100100

long y[M];

char e[M];

char x[M];

int main()

{

long m,n,i,f=0;

while(~scanf("%ld%ld",&m,&n)&&m&&n)

{ memset(x,'\0',sizeof(x));

memset(e,'\0',sizeof(e));

memset(y,-1,sizeof(y));

f=0;

sprintf(e,"%ld.",m/n);

m=m%n;

x[0]='0';

for(i=0;;i++){

if(m==0)

{

sprintf(e+strlen(e),"%s",x);

break;

}

if(y[m]!=-1)

{

sprintf(e+strlen(e),"%.*s(%s)",y[m],x,x+y[m]);

break;

}

y[m]=i;

m*=10;

x[f++]=m/n+'0';

m=m%n;

}

for(i=0;i<strlen(e);i+=76)

{

printf("%.76s\n",e+i);

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: