三种情况:
1.不循环小数 : 分子是小数部分,分母是10^(小数部分长度) 例如:0.5 5 / 10^1 化为最简即可
2.纯循环小数: 是指从小数点第一位开始循环的。 分母都由9组成,9的个数就是一个循环节里数字的个数, 分子是一个循环节;例如:0.(123) 123/999 化为最简即可。
3.混循环小数:是指不是从小数点后一位开始循环的。 分母由9和0组成,9的个数是一个循环节里数字的个数,0是等于不循环数字的个数。分子等于不循环数与第一个循环节减去不循环数;例如:0.12(345) (12345 - 12)/ 99900 化为最简即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int gcd(int x1,int x2){
while(x2 != 0){
int temp = x1 % x2;
x1 = x2;
x2 = temp;
}
return x1;
}
int main(int argc, char *argv[])
{
//freopen("D:\\c - free\\hdu_1717b\\input.txt","r",stdin);
int T;
cin>>T;
//getchar();
while(T--){
int mu1,mu2,zi1,zi2;
mu1=mu2=1;
zi1=zi2=0;
int flag = 1;
char s[20];
cin>>s;
for (int i = 2;i < strlen(s);i++){
if (s[i] == '(') flag = 0;
if (isdigit(s[i])){
if (flag){
mu1 *= 10;
zi1 = zi1 * 10 + s[i]-'0';
}
mu2 *= 10;
zi2 = zi2 * 10 + s[i] - '0';
}
}
//cout<<"zi1="<<zi1<<" zi2="<<zi2<<" mu1="<<mu1<<" mu2="<<mu2<<endl;
if (flag){
int dig = gcd(mu1,zi1);
printf("%d/%d\n",zi1/dig,mu1/dig);
}else{
printf("%d/%d\n",(zi2-zi1)/gcd(zi2-zi1,mu2-mu1),(mu2-mu1)/gcd(zi2-zi1,mu2-mu1));
}
}
return 0;
}