HDU1717小数化分数2

时间:2023-03-08 18:38:13

小数化分数2

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4278    Accepted Submission(s):
1725

Problem Description
Ray
在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
Sample Input
3
0.(4)
0.5
0.32(692307)
Sample Output
4/9
1/2
17/52
Source
Recommend
lcy   |   We have carefully selected several similar
problems for you:  1715 1716 1166 1719 1722 
# include<stdio.h>
int gcd(int a,int b)
{
int temp;
while(a%b!=)
{
temp=a%b;
a=b;
b=temp;
}
return b;
}
int main()
{
int i,ncase,ans,p,q,t,m,n,x,y,k,l;
char ch[];
scanf("%d",&ncase);
while(ncase--)
{
scanf("%s",ch);
x=;
t=;
p=;
q=;
k=;l=;
for(i=;ch[i]!=;i++)
{
if(t== && ch[i]!='(')
{
p++;
x*=;
x+=ch[i]-'';
}
if(t==&& ch[i]!=')')
{
q++;
y*=;
y+=ch[i]-'';
}
if(ch[i]=='(') {t=;y=x;q=p;}
}
if(q==)
{
while(p--)
k*=;
ans=gcd(x,k);
x/=ans;
k/=ans;
printf("%d/%d\n",x,k);
}
else
{
m=y-x;
while(p--)
k*=;
while(q--)
l*=;
n=l-k;
ans=gcd(m,n);
m/=ans;
n/=ans;
printf("%d/%d\n",m,n);
}
}
return ;
}