模拟题,百度一下小数化分数的方法,模拟那个过程就OK了。
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int getIndex(char *str)
{
int count = 0, i = 0;
bool flag = false;
while(str[i] != '\0')
{
if(str[i] == '.')
flag = true;
if(flag && (str[i] >= '0' && str[i] <= '9'))
count++;
i++;
}
return count;
}
int getLoop(char *str)
{
int count = 0, i = 0;
bool flag = false;
while(str[i] != '\0')
{
if(str[i] == '(')
flag = true;
if(flag && (str[i] >= '0' && str[i] <= '9'))
count++;
i++;
}
return count;
}
int check(char *str)
{
int i = 0;
while(str[i] != '\0')
{
if(str[i++] == '(')
return 0;
}
return 1;
}
int gys(int x, int y)
{
int tx = x, ty = y;
int r = tx % ty;
while(r)
{
tx = ty;
ty = r;
r = tx % ty;
}
return ty;
}
int main()
{
char ch[200];
int t;
int a, b;
cin >> t;
while(t--)
{
cin >> ch;
if(check(ch) == 0)
{
int num = getIndex(ch);
int loop = getLoop(ch);
b = (int)pow(10, num) - (int)pow(10, num - loop);
int ans1 = 0, ans2 = 0;
int i = 0;
bool flag = true;
while(ch[i] != '\0')
{
if(ch[i] == '(')
flag = false;
if(ch[i] >= '0' && ch[i] <= '9')
{
ans2 = ans2 * 10 + (ch[i] - '0');
if(flag)
ans1 = ans1 * 10 + (ch[i] - '0');
}
i++;
}
a = ans2 - ans1;
}
else
{
int num = getIndex(ch);
b = (int)pow(10, num);
a = 0;
int i = 0;
while(ch[i] != '\0')
{
if(ch[i] >= '0' && ch[i] <= '9')
{
a = a * 10 + (ch[i] - '0');
}
i++;
}
}
int yue = gys(a, b);
// cout << a << ' ' << b << ' ' << yue << endl;
cout << a / yue << '/' << b / yue << endl;
}
return 0;
}