小数化分数2
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5685 Accepted Submission(s): 2324
Problem Description
Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢?
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
请你写一个程序不但可以将普通小数化成最简分数,也可以把循环小数化成最简分数。
Input
第一行是一个整数N,表示有多少组数据。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
每组数据只有一个纯小数,也就是整数部分为0。小数的位数不超过9位,循环部分用()括起来。
Output
对每一个对应的小数化成最简分数后输出,占一行。
Sample Input
30.(4)0.50.32(692307)
Sample Output
4/91/217/52
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
char t[30];scanf("%s",&t);
int L1=strlen(t),i,j;
long long a=0,b=0,r=1,k=0;
for(i=2;i<L1;i++)
{
if(t[i]=='(')break;
a=a*10+t[i]-'0';
r=r*10;
}
i++;
for( ;i<L1&&t[i]!=')';i++)
{
b=b*10+t[i]-'0';
k=k*10+9;
}
if(k==0)k=1;
long long A=b+a*k,B=k*r;
if(A<B)swap(A,B);
long long C=gcd(A,B);
printf("%lld/%lld\n",B/C,A/C);
}
return 0;
}