两种情况:
1.纯无限循环小数,0.(4) 令x=0.(4) 10*x=4.(4)=x+4 所以x=4/9 故 0.(abc)=abc/(1000-1)=abc/999
2.混合无限循环小数,0.1(5) 目前还不会推导,但知道具体过程:
0.1(5) 循环体有1位则分母加入9,非循环体有1位则分母加入0,故分母为90(也可以看做是循环体加非循环体共有2位,即100,减去循环体的1位,即10,最后得分母90),分子=非循环体连接一个循环体-非循环体=15-1=14 故,分数为14/90 化简7/45
题目会出现三种小数(多一种正常有限小数)
分三类,分别考虑即可
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int gcd(int a,int b)
{
while(b!=0)
{
int t=a;
a=b;
b=t%b;
}
return a;
}
int main()
{
char s[1000];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",s);
int fenmu=1;
int fenzi=0;
int wei=1;
int feixunhuan=0;
int i=2;
int len=strlen(s);
int flag=0;//0有限小数 1纯无限循环小数 2混合小数
if(s[2]=='('){
flag=1;
i++;
}
for(;i<len;i++)
{
if(s[i]=='(')
{
flag=3;
feixunhuan=fenzi;
}
else if(s[i]!=')')
{
fenzi=fenzi*10+(s[i]-'0');
fenmu*=10;
if(flag!=3) wei*=10;
}
}
if(flag==1) fenmu=fenmu-1;
if(flag==3){
fenzi=fenzi-feixunhuan;
fenmu=fenmu-wei;
}
int c=gcd(fenmu,fenzi);
fenmu/=c;
fenzi/=c;
printf("%d/%d\n",fenzi,fenmu);
}
return 0;
}