理论在这里
https://blog.csdn.net/puqutogether/article/details/43267101
#include "iostream"
#include "vector"
#include "string"
#include "math.h"
#include "algorithm"
using namespace std;
int gcd(long x, long y)
{
if (x < y)
return gcd(y, x);
if (y == 0)
return x;
else
gcd(x - y, y);
}
int main()
{
string ss;
int flag = 0;
while (cin >> ss)
{
flag = 0;
int index_xh = ss.find('(');
if (index_xh == -1)//有限小数
flag = 1;
int index_dot = ss.find('.');
if (flag == 1)
{
string s1 = ss.substr(index_dot + 1);
int len1 = s1.length();
long fz = stol(s1);
long fm = pow(10, len1);
long gys = gcd(fz, fm);
cout << fz / gys << "/" << fm / gys << endl;
//cout << integer1;
}
else
{
string s1 = ss.substr(index_dot + 1, index_xh-index_dot-1);
int n = s1.length();
int index_xh2 = ss.find(')');
string s2 = ss.substr(index_xh + 1,index_xh2-index_xh-1);
int m = s2.length();
//cout << s1 << " " << s2 << endl;
long xsn = stol(s1);
long xsm = stol(s2);
long fz = xsn * (pow(10, m) - 1) + xsm;
long fm = pow(10, n) * (pow(10, m) - 1);
int gys = gcd(fz, fm);
cout << fz / gys << "/" << fm / gys << endl;
}
}
}